En ASP.NET 2.0, la función de proveedor de membresía recién agregada, combinada con una serie de potentes controles de registro e inicio de sesión, puede administrar fácilmente el inicio de sesión y los permisos del usuario (consulte << Introducción a los controles de inicio de sesión de ASP.NET 2.0 >>).
Sin embargo, es posible que descubra que los controles de inicio de sesión y las funciones de administración de membresía que vienen con ASP.NET 2.0 se usan con SQL Server 2005 Express de manera predeterminada. Entonces, ¿cómo cambiarlo para usar SQL Server 2000 u otras fuentes de datos, como el acceso? , oráculo, etc.? Si desea reescribir una aplicación para administrar los usuarios que han iniciado sesión o los permisos de usuario en su aplicación, ¿cómo debe modificarla? En este artículo, mostraremos cómo utilizar un proveedor personalizado en ASP.NET 2.0 para cooperar con el control de inicio de sesión para implementar un proceso de inicio de sesión simple.
Para comprender cómo funciona el proveedor en ASP.NET 2.0, primero observe el siguiente diagrama de estructura:
Nombre del campo Tipo de datos Tamaño del campo Nombre de usuario (clave) Texto 8 Texto de contraseña 8 Texto de correo electrónico 50 contraseñaTexto de pregunta 50 contraseñaRespuesta Texto 50 |
Proveedor de membresía SQL modificado de clase pública Hereda SqlMembershipProvider Función de anulación pública CreateUser (...) ... Función final ... Finalizar clase |
Si no desea utilizar SqlMembershipProvider proporcionado en Visual Studio 2005 beta 2, sólo necesita declarar su propia clase y heredar la clase MembershipProvider. La clase MembershipProvider contiene métodos y propiedades relacionados con la membresía.
En el Explorador de soluciones, utilice "Agregar nuevo elemento..." para agregar una clase, asígnele el nombre AccessMembershipProvider.vb y siga las indicaciones del sistema para colocarla en el directorio App_Code.
A continuación, haga referencia al espacio de nombres relevante y escriba el marco del programa de la siguiente manera:
Importa Microsoft.VisualBasic
Importaciones System.Data
Clase pública AccessMembershipProvider
Hereda el proveedor de membresía
Para utilizar un proveedor personalizado,
End Class
debe realizar configuraciones relevantes en web.config.Puede agregar un nuevo archivo web.config y escribir el siguiente código:
<system.web>
<modo de autenticación="Formularios"/>
<membresía
defaultProvider="Proveedor de miembro de acceso" >
<proveedores>
<añadir nombre="Proveedor de membresía de acceso"
tipo="Proveedor de membresía de acceso"
requiereQuestionAndAnswer="verdadero"
ConnectionString="Proveedor=Microsoft.Jet.
OLEDB.4.0;Fuente de datos=C:NewMembershipProvider
App_DataMembers.mdb;Persistir seguridad
Información=Falso" />
</proveedores>
</membresía>
</system.web>
Entre ellos, preste atención a los siguientes puntos:
el método de autenticación debe seleccionarse como "Formularios" (modo de autenticación="forms".
Al utilizar la etiqueta <add>, agregue un proveedor personalizado llamado AccessMembershipProvider). .
El atributo requireQuestionAndAnswer, cuando su valor es verdadero, indica que durante un nuevo registro se deben completar las preguntas y respuestas a responder.
ConnectionString, indica la cadena de conexión para conectarse a la base de datos.
El atributo DefaultProvider indica qué proveedor utiliza el sistema de forma predeterminada, porque se pueden configurar varios proveedores en un sistema.
En AccessMembershipProvider.vb, agregue el siguiente miembro privado
Private connStr As String.
Comunicaciones privadas como nuevo OleDb.OleDbCommand
Privado _requiresQuestionAndAnswer como booleano
Privado _minRequiredPasswordLength como entero
y agrega el método Inicializar(), el código es el siguiente
Anulaciones públicas Subinicializar(nombre de ByVal como cadena, configuración de ByVal como System.Collections.Specialized.NameValueCollection)
'=== recupera los valores de atributo establecidos en
'web.config y asignar a variables locales ===
Si config("requiresQuestionAndAnswer") = "true" Entonces _
_requiresQuestionAndAnswer = Verdadero
connStr = config("cadena de conexión")
MyBase.Initialize(nombre, configuración)
End SubCuando
se carga el proveedor, se llamará al método Initialize(). En el archivo web.config de ahora, los diversos valores de atributos establecidos usando la etiqueta <add> se pueden leer en este método. Por ejemplo, se puede leer usando el parámetro de configuración. En el código anterior, config("connectionString") se usa para leer la cadena de conexión de la base de datos y colocarla en la variable connStr. Después de eso, establezca la propiedad RequiresQuestionAndAnswer de la siguiente manera:
Public Overrides ReadOnly Property _
RequierePreguntaYRespuesta() _
Como booleano
Conseguir
Si _requiresQuestionAndAnswer = Verdadero Entonces
Devolver verdadero
Demás
Devolver Falso
Terminar si
Fin de obtención
Propiedad final
Tenga en cuenta que se debe establecer el valor de esta propiedad; de lo contrario, en el control CreateUserWizard, no se mostrarán los dos cuadros de texto de pregunta de solicitud de contraseña y respuesta de solicitud de contraseña.
A continuación, podemos comenzar a escribir el código para crear un nuevo usuario. El código del método CreateUser() es el siguiente:
Función de anulación pública CreateUser(nombre de usuario de ByVal como cadena, contraseña de ByVal como cadena, correo electrónico de ByVal como cadena, pregunta de contraseña de ByVal como cadena. , ByVal contraseñaAnswer como cadena, ByVal isApproved como booleano, proveedor ByValUserKey como objeto, estado ByRef como System.Web.Security.MembershipCreateStatus) como System.Web.Security.MembershipUser
Atenuar la conexión como nueva OleDb.OleDbConnection(connStr)
Intentar
conexión.Abrir()
Dim sql As String = "INSERTAR EN VALORES de membresía (" & _
"@nombre de usuario, @contraseña, @correo electrónico, " & _
"@contraseñaPregunta, @contraseñaRespuesta)"
Dim comm como nuevo OleDb.OleDbCommand(sql, conn)
comm.Parameters.AddWithValue("@nombredeusuario", nombre de usuario)
comm.Parameters.AddWithValue("@contraseña", contraseña)
comm.Parameters.AddWithValue("@correo electrónico", correo electrónico)
comm.Parameters.AddWithValue("@passwordQuestion", contraseñaQuestion)
comm.Parameters.AddWithValue("@passwordAnswer", contraseñaAnswer)
Resultado tenue como entero = comm.ExecuteNonQuery()
conn.Close()
estado = MembershipCreateStatus.Success
Usuario atenuado como nuevo usuario de membresía ("AccessMembershipProvider", nombre de usuario, nada, correo electrónico, contraseñaPregunta, nada, verdadero, falso, ahora, nada, nada, nada, nada)
Usuario de retorno
Atrapar a ex como excepción
estado = MembershipCreateStatus.UserRejected
No devolver nada
Finalizar intento
Función final
Interpretemos el código anterior. Primero, insertamos un registro en la base de datos. Después de que el nuevo usuario se agregue correctamente, debemos devolver una información de estado (el estado se pasa como estado ByRef como System.Web.Security.MembershipCreateStatus. método), y queremos devolver una instancia de la clase MembershipUser, por lo que devolvemos su instancia de esta manera:
Dim user As New MembershipUser("AccessMembershipProvider", nombre de usuario, Nothing, email, passwordQuestion, Nothing, True, False, Now, Nada, Nada, Nada, Nada)
Entre ellos, hay muchos constructores que utilizan los métodos de la clase MembershipUser. Para obtener más información, puede consultar MSDN. Aquí solo usamos nombre de usuario, correo electrónico, pregunta de contraseña, fecha de creación (fecha de creación de la cuenta, AHORA). utilizado aquí).
En la página de inicio de sesión, para determinar si un usuario legítimo está iniciando sesión, debe escribir el siguiente código:
Función de anulación pública ValidateUser( _
Nombre de usuario de ByVal como cadena, _
Contraseña ByVal como cadena) como booleano
Dim conn como nuevo OleDb.OleDbConnection(connStr)
Intentar
conexión.Abrir()
Dim sql como cadena = _
"Seleccione * De Membresía DONDE " & _
" nombre de usuario = @ nombre de usuario Y contraseña = @ contraseña "
Dim comm como nuevo OleDb.OleDbCommand(sql, conn)
comm.Parameters.AddWithValue("@nombredeusuario", _
nombre de usuario)
comm.Parameters.AddWithValue("@contraseña", _
contraseña)
Lector tenue As OleDb.OleDbDataReader = _
comm.ExecuteReader
Si lector.HasRows Entonces
Devolver verdadero
Demás
Devolver Falso
Terminar si
conn.Close()
Captura ex como excepción
Consola.Write(ex.ToString)
Devolver Falso
Finalizar intento
La función final
es así, se completa un proveedor personalizado simple, que se puede usar con inicio de sesión, registro y otros controles. Cuando ejecuta el programa, aparece por primera vez la página de registro de usuario. Cuando el usuario se registra correctamente, se le dirigirá a la página de inicio de sesión, como se muestra en la siguiente figura: