Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Membership το ανάγνωσμα.

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

    Membership το ανάγνωσμα.

    Καλησπέρα, πάλι εγώ. Μόλις έφτιαξα, ή τουλάχιστον προσπαθώ, να χρησιμοποιήσω ένα δικο μου 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 43608 σε απάντηση της 43603

    Απ: Membership το ανάγνωσμα.

    Βασικά χωρίς να γνωρίζω πολλά από δημιουργία εφαρμογών σε ASP, αλλά βλέποντας απλά το παραπάνω XML δεν υπάρχει provider CABSQLProvider. Αυτό είναι κάτι δικό σου. Το ακριβώς από επάνω είναι σωστό γιατί καθώς διαβάζει η εφαρμογή σου τα settings αυτά βλέπει σε τι βάση θέλεις να συνδεθείς και ανάλογα φτιάχνει το Connection String. Διαβάζοντας όμως το CABSQLProvider δεν γνωρίζει τι βάση υπάρχει από κάτω, δεν φτιάχνει σωστά το Connection String με αποτέλεσμα να μην μπορείς να συνδεθείς. Για βάλε System.Data.SQLClient να δεις τι γίνεται.

    Από μία πρώτη ματιά αυτό πρόσεξα, ίσως κάποιος άλλος να είναι πιο ειδικός.

  •  22-07-2008, 16:23 43609 σε απάντηση της 43603

    Απ: Membership το ανάγνωσμα.

    Για αρχή το λάθος ευρέθει. Ένας περιττός χαρακτήρας έκανε το CABSQLProvider, CABSQLProviders
  •  22-07-2008, 16:55 43610 σε απάντηση της 43609

    Απ: Membership το ανάγνωσμα.

    Ομολογώ πως δεν κατάλαβα γιατί η λύση του προβλήματος είναι αυτή, άλλωστε δεν έχω και τη όλη εικόνα μπροστά μου, αλλά σίγουρα έρχεται να με διαψεύσει.

    Αφού το βρήκες λοιπόν όλα καλα :)

  •  22-07-2008, 22:37 43613 σε απάντηση της 43610

    Απ: Membership το ανάγνωσμα.

    O CABSQLProvider ορίζεται στό section <providers> και είναι απλά ένας SqlMembershipProvider. Μάλλον δεν το είδες επειδή το <add> tag έχει το name attribute 4ο στη σειρά αντί για πρώτο όπως συνηθίζεται. Κάτι μου λέει πάντως ότι αν ο epp1123 μας είχε πει ποιό ήταν το μήνυμα λάθους θα το είχες καταλάβει αμέσως.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  22-07-2008, 23:04 43614 σε απάντηση της 43613

    Απ: Membership το ανάγνωσμα.

    Το λάθος είναι, το γράφω πιο πάνω,  πως όταν πήγαινε στην provider καρτέλα του asp.net web admin και έλεγχα τον provider μου έλεγε πως δεν μπορεί να συνδεθεί στη βάση. Τελικά το πρόβλημα ήταν πως στην κλάση που μου δώσανε για τον provider είχαν βάλει ένα s παραπάνω.
  •  22-07-2008, 23:56 43615 σε απάντηση της 43614

    Απ: Membership το ανάγνωσμα.

    Ερώτηση κρίσεως. Θέλω να χρησιμοποιήσω δικούς μου πίνακες για τους χρήστες, μαζί με το membership. Γίνεται; Τώρα προσπαθώ να βρω κάτι στο νετ, αλλά δυστυχώς, τίποτα.  Ο server είναι SQL Server. Ευχαριστώ
  •  23-07-2008, 00:05 43616 σε απάντηση της 43615

    Απ: Membership το ανάγνωσμα.

    Υπάρχουν πολλές αναφορές. Δοκίμασε να κάνεις μία αναζήτηση για asp.net membership στο DotNetZone και θα βρεις πολλές παρόμοιες συζητήσεις που έχουν γίνει στο παρελθόν.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  23-07-2008, 12:39 43622 σε απάντηση της 43616

    Απ: 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 43625 σε απάντηση της 43622

    Απ: 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 43626 σε απάντηση της 43625

    Απ: Membership το ανάγνωσμα.

    Τα έχω κοιτάξει, αλλα δε βοήθησαν. ευχαριστώ πάντως
  •  23-07-2008, 16:06 43639 σε απάντηση της 43626

    Απ: Membership το ανάγνωσμα.

    Το πιο απλό άρθρο που μπόρεσα να σου βρω για custom provider είναι αυτό

    Ακόλουθα κατά γράμμα τις οδηγίες αυτές και φτιάξε ένα τεστ να δεις όλη την διαδικασία.

    Μετά βλέπουμε που συγκεκριμένα έχεις πρόβλημα.


    Manos
  •  23-07-2008, 16:25 43642 σε απάντηση της 43639

    Απ: 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

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems