|
Îåêßíçóå áðü ôï ìÝëïò epp1123. Τελευταία δημοσίευση από το μέλος epp1123 στις 23-07-2008, 16:25. Υπάρχουν 12 απαντήσεις.
-
22-07-2008, 13:57
|
-
epp1123
-
-

-
Μέλος από τις 15-04-2008
-
Θεσσαλονίκη
-
Δημοσιεύσεις 302
-
-
|
Καλησπέρα, πάλι εγώ. Μόλις έφτιαξα, ή τουλάχιστον προσπαθώ, να χρησιμοποιήσω ένα δικο μου membership για login, logout των χρηστών. Στο web config, θεωρώ, πως έχω γράψει όλα αυτά που πρέπει να έχω γράψει και πάω στο asp.net configuration και στη καρτέλα provider. Εκεί τεστάροντας τον provider μου βγάζει πως δεν μπορεί να συνδεθεί στη βάση δεδομένων. Σας παραδίδω το web config, για περαιτέρω βοήθεια
<?xml version="1.0"?>
<configuration> <appSettings/> <connectionStrings> <add name="CarAndBikesConnectionString" connectionString="Data Source=CW-02;Initial Catalog=CarAndBikes;Integrated Security=True" providerName="System.Data.SqlClient"/> <add name="CABUsersConnectionString" connectionString="Data Source=CW-02;Initial Catalog=CarAndBikes;Integrated Security=True" providerName="CABSQLProvider"/> </connectionStrings> <system.web> ... ...
<authentication mode="Forms"> <forms loginUrl="Pages/User/login.aspx" protection="All" timeout="20" name="CABAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="Pages/User/UserPanel.aspx" cookieless="UseCookies" enableCrossAppRedirects="false"
/> </authentication> <membership defaultProvider="CABSQLProvider"> <providers> <add connectionStringName="CABUsersConnectionString" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" name="CABSQLProvider" type="System.Web.Security.SqlMembershipProvider" /> </providers> </membership>
<customErrors mode="Off"> </customErrors> <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="el-GR" uiCulture="el-GR"/> <httpModules> <add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v8.1, Version=8.1.4.0, Culture=neutral, PublicKeyToken=9B171C9FD64DA1D1" name="ASPxHttpHandlerModule"/> </httpModules> </system.web>
</configuration>
|
|
-
22-07-2008, 16:04
|
-
infoCENTER
-
-

-
Μέλος από τις 15-01-2006
-
Αθήνα
-
Δημοσιεύσεις 280
-
-
|
Απ: Membership το ανάγνωσμα.
Βασικά χωρίς να γνωρίζω πολλά από δημιουργία εφαρμογών σε ASP, αλλά βλέποντας απλά το παραπάνω XML δεν υπάρχει provider CABSQLProvider. Αυτό είναι κάτι δικό σου. Το ακριβώς από επάνω είναι σωστό γιατί καθώς διαβάζει η εφαρμογή σου τα settings αυτά βλέπει σε τι βάση θέλεις να συνδεθείς και ανάλογα φτιάχνει το Connection String. Διαβάζοντας όμως το CABSQLProvider δεν γνωρίζει τι βάση υπάρχει από κάτω, δεν φτιάχνει σωστά το Connection String με αποτέλεσμα να μην μπορείς να συνδεθείς. Για βάλε System.Data.SQLClient να δεις τι γίνεται.
Από μία πρώτη ματιά αυτό πρόσεξα, ίσως κάποιος άλλος να είναι πιο ειδικός.
|
|
-
22-07-2008, 16:23
|
-
epp1123
-
-

-
Μέλος από τις 15-04-2008
-
Θεσσαλονίκη
-
Δημοσιεύσεις 302
-
-
|
Απ: Membership το ανάγνωσμα.
Για αρχή το λάθος ευρέθει. Ένας περιττός χαρακτήρας έκανε το CABSQLProvider, CABSQLProviders
|
|
-
22-07-2008, 16:55
|
-
infoCENTER
-
-

-
Μέλος από τις 15-01-2006
-
Αθήνα
-
Δημοσιεύσεις 280
-
-
|
Απ: Membership το ανάγνωσμα.
Ομολογώ πως δεν κατάλαβα γιατί η λύση του προβλήματος είναι αυτή, άλλωστε δεν έχω και τη όλη εικόνα μπροστά μου, αλλά σίγουρα έρχεται να με διαψεύσει.
Αφού το βρήκες λοιπόν όλα καλα :)
|
|
-
22-07-2008, 22:37
|
|
Απ: Membership το ανάγνωσμα.
O CABSQLProvider ορίζεται στό section <providers> και είναι απλά ένας SqlMembershipProvider. Μάλλον δεν το είδες επειδή το <add> tag έχει το name attribute 4ο στη σειρά αντί για πρώτο όπως συνηθίζεται. Κάτι μου λέει πάντως ότι αν ο epp1123 μας είχε πει ποιό ήταν το μήνυμα λάθους θα το είχες καταλάβει αμέσως.
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
22-07-2008, 23:04
|
-
epp1123
-
-

-
Μέλος από τις 15-04-2008
-
Θεσσαλονίκη
-
Δημοσιεύσεις 302
-
-
|
Απ: Membership το ανάγνωσμα.
Το λάθος είναι, το γράφω πιο πάνω, πως όταν πήγαινε στην provider καρτέλα του asp.net web admin και έλεγχα τον provider μου έλεγε πως δεν μπορεί να συνδεθεί στη βάση. Τελικά το πρόβλημα ήταν πως στην κλάση που μου δώσανε για τον provider είχαν βάλει ένα s παραπάνω.
|
|
-
22-07-2008, 23:56
|
-
epp1123
-
-

-
Μέλος από τις 15-04-2008
-
Θεσσαλονίκη
-
Δημοσιεύσεις 302
-
-
|
Απ: Membership το ανάγνωσμα.
Ερώτηση κρίσεως. Θέλω να χρησιμοποιήσω δικούς μου πίνακες για τους χρήστες, μαζί με το membership. Γίνεται; Τώρα προσπαθώ να βρω κάτι στο νετ, αλλά δυστυχώς, τίποτα. Ο server είναι SQL Server. Ευχαριστώ
|
|
-
23-07-2008, 00:05
|
|
Απ: Membership το ανάγνωσμα.
Υπάρχουν πολλές αναφορές. Δοκίμασε να κάνεις μία αναζήτηση για asp.net membership στο DotNetZone και θα βρεις πολλές παρόμοιες συζητήσεις που έχουν γίνει στο παρελθόν.
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
23-07-2008, 12:39
|
-
epp1123
-
-

-
Μέλος από τις 15-04-2008
-
Θεσσαλονίκη
-
Δημοσιεύσεις 302
-
-
|
Απ: Membership το ανάγνωσμα.
Έχω φτιάξει έναν δικό μου provider ο οποίος κληρονομεί και κάνει override τις μεθόδους από το Membership Provider. Αυτόν το provider θέλω να το βάλω να επικοινωνεί με το login control.
Ωστόσο έχω τις εξής απορίες:
Έστω ότι θέλω να κάνω validate έναν χρήστη. Πως περνάω στη μέθοδο Validate User τις τιμές από τα πεδία;
Επίσης οι μέθοδοι πρέπει να είναι static (στην VB shared), γιατί αλλιώς δεν θα είναι thread safe. Ωστόσο όταν δηλώνεις τη μέθοδο δεν μπορείς να χρησιμοποιήσεις τις λέξεις Shared και Overrides μαζί; Υπάρχει άλλος τρόπος;
Τέλος, τι κώδικα πρέπει να γράψω και που για να του πω ποιον πίνακα να κοιτάει ο provider; Χρησιμοποιώ δικά μου πεδία εντελώς
Πχ μέσα στο ValidateUser() θα γράψω sql, ή υπάρχει κάνα property που του δίνεις ποια πεδία να κοιτάξει και σε ποιον πίνακα
|
|
-
23-07-2008, 13:17
|
-
dStellakis
-
-

-
Μέλος από τις 19-06-2008
-
Αθήνα
-
Δημοσιεύσεις 12
-
-
|
Απ: Membership το ανάγνωσμα.
Αφου τον membership provider τον φτιάχνεις εσύ, εσύ καθορίζεις σε ποιά βάση, σε ποιούς πίνακες και με ποιό τρόπο θα γράψει και θα διαβάσει. Το framework θα χρησιμοποιεί απλά τις μεθόδους του membership provider σου, η υλοποίηση των μεθόδων αυτών θα έχει γινει απο εσένα ειδικά για το σχήμα της βάσης δεδομένων σου. Για παράδειγμα, η CreateUser εσωτερικά θα ανοίγει connection με την δική σου βάση δεδομένων και θα γράφει στον δικό σου πίνακα χρηστών.
Δες εδώ http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx και εδώ http://www.15seconds.com/issue/050216.htm για πληροφορίες και παραδείγματα για το πως να φτιάξεις εναν δικό σου membership provider.
Δημοσθένης Στελλάκης
|
|
-
23-07-2008, 13:42
|
-
epp1123
-
-

-
Μέλος από τις 15-04-2008
-
Θεσσαλονίκη
-
Δημοσιεύσεις 302
-
-
|
Απ: Membership το ανάγνωσμα.
Τα έχω κοιτάξει, αλλα δε βοήθησαν. ευχαριστώ πάντως
|
|
-
23-07-2008, 16:06
|
-
manosB
-
-

-
Μέλος από τις 05-10-2005
-
Καπανδρίτι
-
Δημοσιεύσεις 903
-
-
|
Απ: Membership το ανάγνωσμα.
Το πιο απλό άρθρο που μπόρεσα να σου βρω για custom provider είναι αυτόΑκόλουθα κατά γράμμα τις οδηγίες αυτές και φτιάξε ένα τεστ να δεις όλη την διαδικασία. Μετά βλέπουμε που συγκεκριμένα έχεις πρόβλημα.
Manos
|
|
-
23-07-2008, 16:25
|
-
epp1123
-
-

-
Μέλος από τις 15-04-2008
-
Θεσσαλονίκη
-
Δημοσιεύσεις 302
-
-
|
Απ: Membership το ανάγνωσμα.
Καλησπέρα. Το είχα βρει αυτό και του κοιτούσα, και από πήρα ιδέες για το validate user. Λοιπόν τώρα παίρνω το παρακάτω σφάλμα, αλλά όπως προείπα έχω τη δικιά μου βάση, τον δικό μου πίνακα και πεδία. Πρέπει με κάποιο τρόπο να του τα υποδείξουμε όλα αυτά. Στο web config, όπως θα το δείτε και στην κορυφή, έχω γράψει όλα όσα είναι απαραίτητα. Επίσης στο web admin, στην καρτέλα providers δε με αφήνει να κάνω τεστ τον provider που έφτιαξα εγώ. Μετά το σφάλμα παραθέτω τον κώδικα του provider Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.
Description: An
unhandled exception occurred during the execution of the current web
request. Please review the stack trace for more information about the
error and where it originated in the code.
Exception Details:
System.Data.SqlClient.SqlException: Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.
Source Error:
An unhandled exception was generated during the execution of the
current web request. Information regarding the origin and location of
the exception can be identified using the exception stack trace below.
|
Stack Trace:
[SqlException (0x80131904): Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.] System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +925466 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +800118 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +186 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1932 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +149 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +1005 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +132 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +149 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +135 System.Web.Util.SecUtility.CheckSchemaVersion(ProviderBase provider, SqlConnection connection, String[] features, String version, Int32& schemaVersionCheck) +367 System.Web.Security.SqlMembershipProvider.CheckSchemaVersion(SqlConnection connection) +85 System.Web.Security.SqlMembershipProvider.GetPasswordWithFormat(String username, Boolean updateLastLoginActivityDate, Int32& status, String& password, Int32& passwordFormat, String& passwordSalt, Int32& failedPasswordAttemptCount, Int32& failedPasswordAnswerAttemptCount, Boolean& isApproved, DateTime& lastLoginDate, DateTime& lastActivityDate) +1121 System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved, String& salt, Int32& passwordFormat) +105 System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved) +42 System.Web.Security.SqlMembershipProvider.ValidateUser(String username, String password) +83 System.Web.UI.WebControls.Login.OnAuthenticate(AuthenticateEventArgs e) +160 System.Web.UI.WebControls.Login.AttemptLogin() +105 System.Web.UI.WebControls.Login.OnBubbleEvent(Object source, EventArgs e) +99 System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35 System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e) +115 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +163 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746
| Imports Microsoft.VisualBasic
Public Class CABSQLProvider Inherits MembershipProvider
Public Overrides Sub Initialize(ByVal name As String, ByVal config As NameValueCollection) MyBase.Initialize(name, config) End Sub
Public Overrides Function ValidateUser(ByVal username As String, ByVal password As String) As Boolean
Dim connectionString As String = "Data Source=CW-02;Initial Catalog=CarAndBikes;Integrated Security=True" Dim args As New System.Web.UI.DataSourceSelectArguments Dim SQLDS As New SqlDataSource
Dim UsernameParameter As New Parameter
UsernameParameter.Type = TypeCode.String UsernameParameter.Name = "username" UsernameParameter.DefaultValue = username
Dim PasswordParameter As New Parameter
PasswordParameter.Type = TypeCode.String PasswordParameter.Name = "password" PasswordParameter.DefaultValue = password
SQLDS.ConnectionString = connectionString SQLDS.SelectParameters.Add(UsernameParameter) 'Username Parameter SQLDS.SelectParameters.Add(PasswordParameter) 'Password Parameter SQLDS.SelectCommandType = SqlDataSourceCommandType.Text SQLDS.SelectCommand = "SELECT * FROM Contacts WHERE Contacts_UserName =@username AND Contacts_UserPwd = @password " SQLDS.Select(args)
If SQLDS.Select(args) IsNot Nothing Then Return True Else Return False
End If End Function
Public Overrides Property ApplicationName() As String Get Return Nothing End Get Set(ByVal value As String)
End Set End Property
Public Overrides Function ChangePassword(ByVal username As String, ByVal oldPassword As String, ByVal newPassword As String) As Boolean
End Function
Public Overrides Function ChangePasswordQuestionAndAnswer(ByVal username As String, ByVal password As String, ByVal newPasswordQuestion As String, ByVal newPasswordAnswer As String) As Boolean
End Function
Public Overrides Function CreateUser(ByVal username As String, ByVal password As String, ByVal email As String, ByVal passwordQuestion As String, ByVal passwordAnswer As String, ByVal isApproved As Boolean, ByVal providerUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser Return Nothing End Function
Public Overrides Function DeleteUser(ByVal username As String, ByVal deleteAllRelatedData As Boolean) As Boolean
End Function
Public Overrides ReadOnly Property EnablePasswordReset() As Boolean Get
End Get End Property
Public Overrides ReadOnly Property EnablePasswordRetrieval() As Boolean Get
End Get End Property
Public Overrides Function FindUsersByEmail(ByVal emailToMatch As String, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection Return Nothing End Function
Public Overrides Function FindUsersByName(ByVal usernameToMatch As String, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection Return Nothing End Function
Public Overrides Function GetAllUsers(ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection Return Nothing End Function
Public Overrides Function GetNumberOfUsersOnline() As Integer
End Function
Public Overrides Function GetPassword(ByVal username As String, ByVal answer As String) As String Return Nothing End Function
Public Overloads Overrides Function GetUser(ByVal providerUserKey As Object, ByVal userIsOnline As Boolean) As System.Web.Security.MembershipUser Return Nothing End Function
Public Overloads Overrides Function GetUser(ByVal username As String, ByVal userIsOnline As Boolean) As System.Web.Security.MembershipUser Return Nothing End Function
Public Overrides Function GetUserNameByEmail(ByVal email As String) As String Return Nothing End Function
Public Overrides ReadOnly Property MaxInvalidPasswordAttempts() As Integer Get
End Get End Property
Public Overrides ReadOnly Property MinRequiredNonAlphanumericCharacters() As Integer Get
End Get End Property
Public Overrides ReadOnly Property MinRequiredPasswordLength() As Integer Get
End Get End Property
Public Overrides ReadOnly Property PasswordAttemptWindow() As Integer Get
End Get End Property
Public Overrides ReadOnly Property PasswordFormat() As System.Web.Security.MembershipPasswordFormat Get
End Get End Property
Public Overrides ReadOnly Property PasswordStrengthRegularBLOCKED EXPRESSION As String Get Return Nothing End Get End Property
Public Overrides ReadOnly Property RequiresQuestionAndAnswer() As Boolean Get Return False End Get End Property
Public Overrides ReadOnly Property RequiresUniqueEmail() As Boolean Get Return False End Get End Property
Public Overrides Function ResetPassword(ByVal username As String, ByVal answer As String) As String Return Nothing End Function
Public Overrides Function UnlockUser(ByVal userName As String) As Boolean
End Function
Public Overrides Sub UpdateUser(ByVal user As System.Web.Security.MembershipUser)
End Sub End Class
|
|
|
|
|