Dans ASP.NET 2.0, la fonction de fournisseur d'adhésion nouvellement ajoutée, combinée à une série de puissants contrôles d'enregistrement et de connexion, peut facilement gérer la connexion et les autorisations des utilisateurs (voir << Introduction aux contrôles de connexion ASP.NET 2.0 >>).
Cependant, vous constaterez peut-être que les contrôles de connexion et les fonctions de gestion des adhésions fournis avec ASP.NET 2.0 sont utilisés par défaut avec SQL Server 2005 Express. Alors, comment les modifier pour utiliser SQL Server 2000 ou d'autres sources de données, telles que l'accès ? , oracle, etc.? Si vous souhaitez réécrire une application pour gérer les utilisateurs connectés ou les autorisations des utilisateurs dans votre application, comment devez-vous la modifier ? Dans cet article, nous montrerons comment utiliser un fournisseur personnalisé dans ASP.NET 2.0 pour coopérer avec le contrôle de connexion afin d'implémenter un processus de connexion simple.
Afin de comprendre le fonctionnement du fournisseur dans ASP.NET 2.0, examinez d’abord le diagramme de structure suivant :
Nom du champ Type de données Taille du champ Nom d'utilisateur (clé) Texte 8 Texte du mot de passe 8 Envoyer un SMS 50 mot de passeTexte de la question 50 mot de passeTexte de réponse 50 |
Classe publique ModifiedSqlMembershipProvider Hérite de SqlMembershipProvider Fonction de remplacement publique CreateUser (...) ... Fonction de fin ... Fin de classe |
Si vous ne souhaitez pas utiliser le SqlMembershipProvider fourni dans Visual Studio 2005 bêta 2, il vous suffit de déclarer votre propre classe et d'hériter de la classe MembershipProvider. La classe MembershipProvider contient des méthodes et des propriétés liées à l'adhésion.
Dans l'Explorateur de solutions, utilisez « Ajouter un nouvel élément... » pour ajouter une classe, nommez-la AccessMembershipProvider.vb et suivez les invites du système pour la placer dans le répertoire App_Code.
Ensuite, référencez l'espace de noms approprié et écrivez le framework du programme comme suit :
Imports Microsoft.VisualBasic
Importe
la classe publique System.Data AccessMembershipProvider
Hérite du fournisseur d'adhésion
Afin d'utiliser un fournisseur personnalisé,
End Class
doit effectuer les configurations pertinentes dans web.config.Vous pouvez ajouter un nouveau fichier web.config et écrire le code suivant :
<system.web>
<mode d'authentification="Formulaires"/>
<adhésion
defaultProvider="AccessMembershipProvider" >
<fournisseurs>
<ajouter un nom="AccessMembershipProvider"
type="AccessMembershipProvider"
nécessiteQuestionAndAnswer="true"
connectionString="Provider=Microsoft.Jet.
OLEDB.4.0;Source de données=C:NewMembershipProvider
App_DataMembers.mdb ; Persistance de la sécurité
Info=Faux" />
</fournisseurs>
</adhésion>
</system.web>
Parmi eux, veuillez faire attention aux points suivants :
la méthode d'authentification doit être sélectionnée comme "Forms" (authentication mode="forms").
En utilisant la balise <add>, ajoutez un fournisseur personnalisé nommé AccessMembershipProvider. .
L'attribut requireQuestionAndAnswer, lorsque sa valeur est vraie, indique que lors d'une nouvelle inscription, des questions et réponses rapides doivent être remplies.
ConnectionString, indique la chaîne de connexion pour se connecter à la base de données.
L'attribut DefaultProvider indique le fournisseur que le système utilise par défaut, car plusieurs fournisseurs peuvent être définis dans un système.
Dans AccessMembershipProvider.vb, ajoutez le membre privé suivant
Private connStr As String.
Communication privée en tant que nouveau OleDb.OleDbCommand
Private _requiresQuestionAndAnswer en tant que booléen
Private _minRequiredPasswordLength As Integer
et ajoutez la méthode Initialize(), le code est le suivant
Public Overrides Sub Initialize(ByVal name As String, ByVal config As System.Collections.Specialized.NameValueCollection)
'===récupère les valeurs d'attribut définies dans
'web.config et attribuer aux variables locales ===
Si config("requiresQuestionAndAnswer") = "true" Alors _
_requiresQuestionAndAnswer = Vrai
connStr = config("connectionString")
MyBase.Initialize(nom, configuration)
End SubLorsque
le fournisseur est chargé, la méthode Initialize() sera appelée. Dans le fichier web.config à l'instant, les différentes valeurs d'attribut définies à l'aide de la balise <add> peuvent être lues dans cette méthode. Par exemple, il peut être lu en utilisant le paramètre config. Dans le code ci-dessus, config("connectionString") est utilisé pour lire la chaîne de connexion à la base de données et la placer dans la variable connStr. Après cela, définissez la propriété RequiresQuestionAndAnswer comme suit :
Public Overrides ReadOnly Property _
RequiertQuestionAndAnswer() _
Comme booléen
Obtenir
Si _requiresQuestionAndAnswer = True Alors
Renvoyer vrai
Autre
Renvoyer Faux
Fin si
Fin Obtenir
Propriété End
Notez que la valeur de cette propriété doit être définie, sinon, dans le contrôle CreateUserWizard, les deux zones de texte de question d'invite de mot de passe et de réponse à l'invite de mot de passe ne seront pas affichées.
Ensuite, nous pouvons commencer à écrire le code pour créer un nouvel utilisateur. Le code de la méthode CreateUser() est le suivant :
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 supplierUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser
Dim conn As New OleDb.OleDbConnection(connStr)
Essayer
conn.Open()
Dim sql As String = "INSERT INTO Membership VALUES (" & _
"@nom d'utilisateur, @mot de passe, @email, " & _
" @passwordQuestion, @passwordAnswer )"
Dim comm comme nouveau OleDb.OleDbCommand (sql, conn)
comm.Parameters.AddWithValue("@username", nom d'utilisateur)
comm.Parameters.AddWithValue("@password", mot de passe)
comm.Parameters.AddWithValue("@email", email)
comm.Parameters.AddWithValue("@passwordQuestion", passwordQuestion)
comm.Parameters.AddWithValue("@passwordAnswer", mot de passeAnswer)
Dim résultat As Integer = comm.ExecuteNonQuery()
conn.Close()
= MembershipCreateStatus.Success
Dim user As New MembershipUser("AccessMembershipProvider", nom d'utilisateur, Nothing, email, passwordQuestion, Nothing, True, False, Now, Nothing, Nothing, Nothing, Nothing)
Retourner l'utilisateur
Attraper un ex comme exception
statut = MembershipCreateStatus.UserRejected
Ne rien renvoyer
Fin Essayer
End Function
Interprétons le code ci-dessus. Tout d'abord, nous insérons un enregistrement dans la base de données. Une fois le nouvel utilisateur ajouté avec succès, nous devons renvoyer une information d'état (le statut est transmis en tant que ByRef status As System.Web.Security .MembershipCreateStatus. méthode), et nous voulons renvoyer une instance de la classe MembershipUser, nous renvoyons donc son instance de cette manière :
Dim user As New MembershipUser("AccessMembershipProvider", username, Nothing, email, passwordQuestion, Nothing, True , False, Now, Nothing, Nothing, Nothing, Nothing)
Parmi eux, il existe de nombreux constructeurs qui utilisent les méthodes de la classe MembershipUser Pour plus de détails, vous pouvez consulter MSDN Ici, nous utilisons uniquement le nom d'utilisateur, l'e-mail, le mot de passeQuestion, la date de création (date de création du compte, MAINTENANT). utilisé ici).
Sur la page de connexion, afin de déterminer si un utilisateur légitime se connecte, vous devez écrire le code suivant :
Public Overrides Function ValidateUser( _
Nom d'utilisateur ByVal As String, _
Mot de passe ByVal As String) As Boolean
Dim conn As New OleDb.OleDbConnection (connStr)
Essayer
conn.Open()
Dim sql As String = _
"Sélectionnez * De l'adhésion OÙ " & _
" nom d'utilisateur = @ nom d'utilisateur ET mot de passe = @ mot de passe "
Dim comm comme nouveau OleDb.OleDbCommand (sql, conn)
comm.Parameters.AddWithValue("@nomutilisateur", _
nom d'utilisateur)
comm.Parameters.AddWithValue("@password", _
mot de passe)
Lecteur Dim As OleDb.OleDbDataReader = _
comm.ExecuteReader
Si reader.HasRows Alors
Renvoyer vrai
Autre
Renvoyer Faux
Fin si
conn.Close()
Attraper ex comme exception
Console.Write (ex.ToString)
Renvoyer Faux
Fin Essayer
End Function
est comme ça, un simple fournisseur personnalisé est complété, qui peut être utilisé avec la connexion, l'enregistrement et d'autres contrôles. Lorsque vous exécutez le programme, la page d'enregistrement de l'utilisateur apparaît pour la première fois. Lorsque l'utilisateur s'inscrit avec succès, il sera dirigé vers la page de connexion, comme le montre la figure suivante :