.NET Framework 4 - ASP.NET Implementing a Membership Provider ASP.NET membership is designed to enable you to easily use a number of different membership providers for your ASP.NET applications. You can use the supplied membership providers that are included with the .NET Framework, or you can implement your own providers. There are two primary reasons for creating a custom membership provider. You need to store membership information in a data source that is not supported by the membership providers included with the .NET Framework, such as a FoxPro database, an Oracle database, or other data sources. You need to manage membership information using a database schema that is different from the database schema used by the providers that ship with the .NET Framework. A common example of this would be membership data that already exists in a SQL Server database for a company or Web site.

Required Classes

Required ProviderBase Members
Member | Description |
|---|
Initialize method | Takes, as input, the name of the provider and a NameValueCollection of configuration settings. Used to set property values for the provider instance including implementation-specific values and options specified in the configuration file (Machine.config or Web.config) supplied in the configuration. |
Required MembershipProvider MembersMember | Description |
|---|
EnablePasswordReset property | A Boolean value specified in the configuration file (Web.config). The EnablePasswordReset property indicates whether users can use the ResetPassword method to overwrite their current password with a new, randomly generated password. This property is read-only. | EnablePasswordRetrieval property | A Boolean value specified in the configuration file (Web.config). The EnablePasswordRetrieval property indicates whether users can retrieve their password using the GetPassword method. This property is read-only. | RequiresQuestionAndAnswer property | A Boolean value specified in the configuration file (Web.config). The RequiresQuestionAndAnswer property indicates whether users must supply a password answer in order to retrieve their password using the GetPassword method, or reset their password using the ResetPassword method. This property is read-only. | RequiresUniqueEmail property | A Boolean value specified in the configuration file (Web.config). The RequiresUniqueEmail property indicates whether users must supply a unique e-mail address value when creating a user. If a user already exists in the data source for the current ApplicationName, the CreateUser method returns null and a status value of DuplicateEmail. This property is read-only. | PasswordFormat property | A MembershipPasswordFormat value specified in the configuration file (Web.config). The PasswordFormat property indicates the format that passwords are stored in. Passwords can be stored in Clear, Encrypted, and Hashed password formats. Clear passwords are stored in plain text, which improves the performance of password storage and retrieval but is less secure, as passwords are easily read if your data source is compromised. Encrypted passwords are encrypted when stored and can be decrypted for password comparison or password retrieval. This requires additional processing for password storage and retrieval but is more secure, as passwords are not easily determined if the data source is compromised. Hashed passwords are hashed using a one-way hash algorithm and a randomly generated salt value when stored in the database. When a password is validated, it is hashed with the salt value in the database for verification. Hashed passwords cannot be retrieved. You can use the EncryptPassword and DecryptPassword virtual methods of the MembershipProvider class to encrypt and decrypt password values, or you can supply your own encryption code. If you use the EncryptPassword and DecryptPassword virtual methods of the MembershipProvider class, Encrypted passwords are encrypted using the key information supplied in the machineKey element the configuration file. This property is read-only. | MaxInvalidPasswordAttempts property | An Integer value specified in the configuration file (Web.config). The MaxInvalidPasswordAttempts works in conjunction with the PasswordAttemptWindow to guard against an unwanted source guessing the password or password answer of a membership user through repeated attempts. If the number of invalid passwords or password questions supplied for a membership user exceeds the MaxInvalidPasswordAttempts within the number of minutes identified by the PasswordAttemptWindow, then the membership user is locked out by setting the IsLockedOut property to true until the user is unlocked using the UnlockUser method. If a valid password or password answer is supplied before the MaxInvalidPasswordAttempts is reached, the counter that tracks the number of invalid attempts is reset to zero. If the RequiresQuestionAndAnswer property is set to false, invalid password answer attempts are not tracked. Invalid password and password answer attempts are tracked in the ValidateUser, ChangePassword, ChangePasswordQuestionAndAnswer, GetPassword, and ResetPassword methods. This property is read-only. | PasswordAttemptWindow property | An Integer value specified in the configuration file (Web.config). For a description, see the description of the MaxInvalidPasswordAttempts property. This property is read-only. | ApplicationName property | The name of the application using the membership information specified in the configuration file (Web.config). The ApplicationName is stored in the data source with related user information and used when querying for that information. See the section on the ApplicationName later in this topic for more information. This property is read/write and defaults to the ApplicationPath if not specified explicitly. | MembershipProvider..::.CreateUser method | Takes, as input, the name of a new user, a password, and an e-mail address and inserts a new user for the application into the data source. The CreateUser method returns a MembershipUser object that is populated with the information for the newly created user. The CreateUser method also defines an out parameter (in Visual Basic, you can use ByRef) that returns a MembershipCreateStatus value that indicates whether the user was successfully created, or a reason that the user was not successfully created. The CreateUser method raises the ValidatingPassword event if a MembershipValidatePasswordEventHandler has been specified, and continues or cancels the create-user action based on the results of the event. You can use the OnValidatingPassword virtual method to execute the specified MembershipValidatePasswordEventHandler. | UpdateUser method | Takes, as input, a MembershipUser object populated with user information and updates the data source with the supplied values. | DeleteUser method | Takes, as input, the name of a user and deletes that user's information from the data source. The DeleteUser method returns true if the user was successfully deleted; otherwise, false. An additional Boolean parameter is included to indicate whether related information for the user, such as role or profile information is also deleted. | ValidateUser method | Takes, as input, a user name and a password and verifies that the values match those in the data source. The ValidateUser method returns true for a successful user name and password match; otherwise, false. | GetUser method | Takes, as input, a unique user identifier and a Boolean value indicating whether to update the LastActivityDate value for the user to show that the user is currently online. The GetUser method returns a MembershipUser object populated with current values from the data source for the specified user. If the user name is not found in the data source, the GetUser method returns null (Nothing in Visual Basic). | GetUser method | Takes, as input, a user name and a Boolean value indicating whether to update the LastActivityDate value for the user to show that the user is currently online. The GetUser method returns a MembershipUser object populated with current values from the data source for the specified user. If the user name is not found in the data source, the GetUser method returns null (Nothing in Visual Basic). | GetAllUsers method | Returns a MembershipUserCollection populated with MembershipUser objects for all of the users in the data source. The results returned by GetAllUsers are constrained by the pageIndex and pageSize parameters. The pageSize parameter identifies the maximum number of MembershipUser objects to return in the MembershipUserCollection. The pageIndex parameter identifies which page of results to return, where 0 identifies the first page. The totalRecords parameter is an out parameter that is set to the total number of membership users. For example, if 13 users were in the database for the application, and the pageIndex value was 1 with a pageSize of 5, the MembershipUserCollection returned would contain the sixth through the tenth users returned. totalRecords would be set to 13. | GetNumberOfUsersOnline method | Returns an integer value that is the count of all the users in the data source where the LastActivityDate is greater than the current date and time minus the UserIsOnlineTimeWindow property. The UserIsOnlineTimeWindow property is an integer value specifying the number of minutes to use when determining whether a user is online. | ResetPassword method | Takes, as input, a user name and a password answer and generates a new, random password for the specified user. The ResetPassword method updates the user information in the data source with the new password value and returns the new password as a string. A convenient mechanism for generating a random password is the GeneratePassword method of the Membership class. The ResetPassword method ensures that the EnablePasswordReset property is set to true before performing any action. If the EnablePasswordReset property is false, a NotSupportedException is thrown. The ResetPassword method also checks the value of the RequiresQuestionAndAnswer property. If the RequiresQuestionAndAnswer property is true, the ResetPassword method checks the value of the supplied answer parameter against the stored password answer in the data source. If they do not match, a MembershipPasswordException is thrown. The ResetPassword method raises the ValidatingPassword event, if a MembershipValidatePasswordEventHandler has been specified, to validate the newly generated password and continues or cancels the reset-password action based on the results of the event. You can use the OnValidatingPassword virtual method to execute the specified MembershipValidatePasswordEventHandler. | GetPassword method | Takes, as input, a user name and a password answer and retrieves the password for that user from the data source and returns the password as a string. GetPassword ensures that the EnablePasswordRetrieval property is set to true before performing any action. If the EnablePasswordRetrieval property is false, an ProviderException is thrown. The GetPassword method also checks the value of the RequiresQuestionAndAnswer property. If the RequiresQuestionAndAnswer property is true, the GetPassword method checks the value of the supplied answer parameter against the stored password answer in the data source. If they do not match, a MembershipPasswordException is thrown. | GetUserNameByEmail method | Takes, as input, an e-mail address and returns the first user name from the data source where the e-mail address matches the supplied email parameter value. If no user name is found with a matching e-mail address, an empty string is returned. If multiple user names are found that match a particular e-mail address, only the first user name found is returned. | ChangePassword method | Takes, as input, a user name, a current password, and a new password, and updates the password in the data source if the supplied user name and current password are valid. The ChangePassword method returns true if the password was updated successfully; otherwise, false. The ChangePassword method raises the ValidatingPassword event, if a MembershipValidatePasswordEventHandler has been specified, and continues or cancels the change-password action based on the results of the event. You can use the OnValidatingPassword virtual method to execute the specified MembershipValidatePasswordEventHandler. | ChangePasswordQuestionAndAnswer method | Takes, as input, a user name, a password, a password question, and a password answer, and updates the password question and answer in the data source if the supplied user name and password are valid. The ChangePasswordQuestionAndAnswer method returns true if the password question and answer are updated successfully; otherwise, false. If the supplied user name and password are not valid, false is returned. | FindUsersByName method | Returns a list of membership users where the user name contains a match of the supplied usernameToMatch for the configured ApplicationName. For example, if the usernameToMatch parameter is set to "user," then the users "user1," "user2," "user3," and so on are returned. Wildcard support is included based on the data source. Users are returned in alphabetical order by user name. The results returned by FindUsersByName are constrained by the pageIndex and pageSize parameters. The pageSize parameter identifies the number of MembershipUser objects to return in the MembershipUserCollection. The pageIndex parameter identifies which page of results to return, where 1 identifies the first page. The totalRecords parameter is an out parameter that is set to the total number of membership users that matched the usernameToMatch value. For example, if 13 users were found where usernameToMatch matched part of or the entire user name, and the pageIndex value was 2 with a pageSize of 5, then the MembershipUserCollection would contain the sixth through the tenth users returned. totalRecords would be set to 13. | FindUsersByEmail method | Returns a list of membership users where the user name contains a match of the supplied emailToMatch for the configured ApplicationName. For example, if the emailToMatch parameter is set to "address@example.com," then users with the e-mail addresses "address1@example.com," "address2@example.com," and so on are returned. Wildcard support is included based on the data source. Users are returned in alphabetical order by user name. The results returned by FindUsersByEmail are constrained by the pageIndex and pageSize parameters. The pageSize parameter identifies the number of MembershipUser objects to return in the MembershipUserCollection collection. The pageIndex parameter identifies which page of results to return, where 1 identifies the first page. The totalRecords parameter is an out parameter that is set to the total number of membership users that matched the emailToMatch value. For example, if 13 users were found where emailToMatch matched part of or the entire user name, and the pageIndex value was 2 with a pageSize of 5, then the MembershipUserCollection would contain the sixth through the tenth users returned. totalRecords would be set to 13. | UnlockUser method | Takes, as input, a user name, and updates the field in the data source that stores the IsLockedOut property to false. The UnlockUser method returns true if the record for the membership user is updated successfully; otherwise false. |

ApplicationName
Membership providers store user information uniquely for each application. This enables multiple ASP.NET applications to use the same data source without running into a conflict if duplicate user names are created. Alternatively, multiple ASP.NET applications can use the same user data source by specifying the same ApplicationName. Because membership providers store user information uniquely for each application, you will need to ensure that your data schema includes the application name and that queries and updates also include the application name. For example, the following command is used to retrieve a user name from a database, based on the e-mail address, and ensures that the ApplicationName is included in the query.
SELECT Username FROM MyUserTable
WHERE Email = 'someone@example.com' AND ApplicationName = 'MyApplication'

Custom Members
You may need to extend the membership provider interfaces with additional functionality not provided by the ProviderBase and MembershipProvider abstract classes. Any public members that you add to your membership provider will be accessible using the Provider or Providers property of the Membership class. An example of this could be a LockUser method that sets the IsLockedOut property to true. The following example shows how to cast the Provider property, which exposes the default membership provider for an application, as a custom-provider type in order to call the custom LockUser method.
Dim p As MyCustomProvider = CType(Membership.Provider, MyCustomProvider)
p.LockUser(username)
MyCustomProvider p = (MyCustomProvider)Membership.Provider;
p.LockUser(username);

Thread Safety
For each membership provider specified in the configuration for an application, ASP.NET instantiates a single membership provider instance that is used for all of the requests served by an HttpApplication object. As a result, you can have multiple requests executing concurrently. ASP.NET does not ensure the thread safety of calls to your provider. You will need to write your provider code to be thread safe. For example, creating a connection to a database or opening a file for editing should be done within the member that is called, such as MembershipProvider..::.CreateUser, rather than opening a file or database connection when the Initialize method is called.

See Also
ReferenceConceptsOther Resources
|
.NET Framework 4 - ASP.NET Implementar un proveedor de pertenencias La pertenencia a ASP.NET se ha diseñado para que se pueda utilizar con facilidad una serie de proveedores de pertenencias diferentes en las aplicaciones ASP.NET. Puede utilizar los proveedores de pertenencias proporcionados que se incluyen en .NET Framework o puede implementar sus propios proveedores. Existen dos razones fundamentales para crear un proveedor de pertenencias personalizado: Necesita almacenar la información de pertenencia en un origen de datos que no es compatible con los proveedores de pertenencias incluidos en .NET Framework, como una base de datos de FoxPro, una base de datos de Oracle u otros orígenes de datos. Necesita administrar la información de pertenencia mediante un esquema de base de datos que es diferente del que utilizan los proveedores que se distribuyen con .NET Framework. Un ejemplo común serían los datos de pertenencia que ya existen en una base de datos de SQL Server de una compañía o un sitio Web.

Clases requeridas

Miembros de ProviderBase necesarios
Miembro | Descripción |
|---|
Método Initialize | Toma como entrada el nombre del proveedor y una colección NameValueCollection de los valores de configuración. Se utiliza para establecer los valores de las propiedades en la instancia del proveedor, entre los que se incluyen los valores específicos de la implementación y las opciones especificadas en el archivo de configuración (Machine.config o Web.config) proporcionado en la configuración. |
Miembros de MembershipProvider necesariosMiembro | Descripción |
|---|
Propiedad EnablePasswordReset | Valor Boolean especificado en el archivo de configuración (Web.config). La propiedad EnablePasswordReset indica si los usuarios pueden utilizar el método ResetPassword para sustituir su contraseña actual por una nueva generada aleatoriamente. Esta propiedad es de sólo lectura. | Propiedad EnablePasswordRetrieval | Valor Boolean especificado en el archivo de configuración (Web.config). La propiedad EnablePasswordRetrieval indica si los usuarios pueden recuperar su contraseña mediante el método GetPassword. Esta propiedad es de sólo lectura. | Propiedad RequiresQuestionAndAnswer | Valor Boolean especificado en el archivo de configuración (Web.config). La propiedad RequiresQuestionAndAnswer indica si los usuarios deben proporcionar una respuesta de contraseña para recuperar su contraseña mediante el método GetPassword o para restablecer su contraseña mediante el método ResetPassword. Esta propiedad es de sólo lectura. | Propiedad RequiresUniqueEmail | Valor Boolean especificado en el archivo de configuración (Web.config). La propiedad RequiresUniqueEmail indica si los usuarios deben proporcionar un valor exclusivo de dirección de correo electrónico al crear un usuario. Si ya existe un usuario en el origen de datos para el valor actual de la propiedad ApplicationName, el método CreateUser devuelve null y un valor de estado de DuplicateEmail. Esta propiedad es de sólo lectura. | Propiedad PasswordFormat | Valor MembershipPasswordFormat especificado en el archivo de configuración (Web.config). La propiedad PasswordFormat indica el formato en el que se almacenan las contraseñas. Las contraseñas pueden almacenarse en los formatos Clear, Encrypted y Hashed. Las contraseñas de tipo Clear se almacenan en texto sin formato, lo que mejora el rendimiento en materia de almacenamiento y recuperación de contraseñas; sin embargo, es menos seguro ya que las contraseñas se leen con facilidad cuando se ve comprometida la seguridad del origen de datos. Las contraseñas Encrypted se cifran cuando se almacenan y se pueden descifrar para su comparación o recuperación. Esto requiere un procesamiento adicional para el almacenamiento y la recuperación de contraseñas, pero es más seguro ya que las contraseñas no pueden determinarse con facilidad si se ve comprometida la seguridad del origen de datos. Las contraseñas Hashed se fragmentan utilizando un algoritmo hash unidireccional y un valor salt que se genera aleatoriamente cuando se almacenan en la base de datos. Cuando se valida una contraseña, se fragmenta con el valor salt en la base de datos para su comprobación. Las contraseñas fragmentadas no se pueden recuperar. Puede utilizar el método EncryptPassword y los métodos virtuales DecryptPassword de la clase MembershipProvider para cifrar y descifrar los valores de la contraseña, o puede proporcionar su propio código de cifrado. Si usa los métodos virtuales EncryptPassword y DecryptPassword de la clase MembershipProvider, las contraseñas Encrypted se cifran usando la información de clave que se proporciona en el elemento machineKey del archivo de configuración. Esta propiedad es de sólo lectura. | Propiedad MaxInvalidPasswordAttempts | Valor Integer especificado en el archivo de configuración (Web.config). La propiedad MaxInvalidPasswordAttempts actúa junto con la propiedad PasswordAttemptWindow como medida de protección si un origen no deseado intenta adivinar varias veces la contraseña o la respuesta de contraseña de un usuario de pertenencia. Si el número de contraseñas o de preguntas de contraseña incorrectas proporcionado por un usuario de pertenencia supera el valor MaxInvalidPasswordAttempts durante el período de minutos identificado por la propiedad PasswordAttemptWindow, el usuario de pertenencia se bloquea estableciendo la propiedad IsLockedOut en true hasta que este bloqueo se libera mediante el método UnlockUser. Si se proporciona una contraseña o una respuesta de contraseña válida antes de que se alcance el valor MaxInvalidPasswordAttempts, el contador que realiza el seguimiento del número de intentos no válidos se restablece en cero. Si la propiedad RequiresQuestionAndAnswer se establece en false, no se realiza un seguimiento de los intentos de respuesta de contraseña incorrectos. Los intentos incorrectos de contraseña o de respuesta de contraseña se siguen en los métodos ValidateUser, ChangePassword, ChangePasswordQuestionAndAnswer, GetPassword y ResetPassword. Esta propiedad es de sólo lectura. | Propiedad PasswordAttemptWindow | Valor Integer especificado en el archivo de configuración (Web.config). Para consultar una descripción, vea la descripción de la propiedad MaxInvalidPasswordAttempts. Esta propiedad es de sólo lectura. | Propiedad ApplicationName | Nombre de la aplicación que utiliza la información de pertenencia especificada en el archivo de configuración (Web.config). La propiedad ApplicationName se almacena en el origen de datos con la información del usuario relacionada y se utiliza cuando se consulta dicha información. Consulte la sección de la propiedad ApplicationName que aparece más adelante en este mismo tema para obtener más información. Esta propiedad es de lectura y escritura, y tiene como valor predefinido ApplicationPath si no se ha especificado ningún otro valor explícitamente. | Método MembershipProvider..::.CreateUser | Toma como entrada el nombre de un nuevo usuario, una contraseña y una dirección de correo electrónico, e inserta un nuevo usuario de la aplicación en el origen de datos. El método CreateUser devuelve un objeto MembershipUser que se rellena con la información del usuario recién creado. El método CreateUser también define un parámetro out (en Visual Basic, puede utilizar ByRef) que devuelve un valor de MembershipCreateStatus que indica si el usuario se ha creado correctamente o especifica la razón por la que no se ha podido crear correctamente. El método CreateUser genera el evento ValidatingPassword si se ha especificado un controlador MembershipValidatePasswordEventHandler, y continúa o cancela la acción de creación de usuario en función de los resultados del evento. Puede utilizar el método virtual OnValidatingPassword para ejecutar el MembershipValidatePasswordEventHandler especificado. | Método UpdateUser | Toma como entrada un objeto MembershipUser que se ha rellenado con la información del usuario y actualiza el origen de datos con los valores proporcionados. | Método DeleteUser | Toma como entrada el nombre de un usuario y elimina la información de ese usuario del origen de datos. El método DeleteUser devuelve true si el usuario se ha eliminado correctamente; de lo contrario, devuelve false. Se incluye un parámetro Boolean adicional para indicar si la información relacionada con el usuario, como una función o la información del perfil, también se elimina. | Método ValidateUser | Toma como entrada un nombre de usuario y una contraseña y comprueba que los valores coinciden con los del origen de datos. El método ValidateUser devuelve true si el nombre de usuario y la contraseña coinciden; de lo contrario, devuelve false. | Método GetUser | Toma como entrada un identificador de usuario exclusivo y un valor Boolean que especifican si debe actualizarse el valor de LastActivityDate del usuario para indicar que el usuario está conectado en la actualidad. El método GetUser devuelve un objeto MembershipUser que se rellena con los valores actuales del origen de datos del usuario especificado. Si el nombre de usuario no se encuentra en el origen de datos, el método GetUser devuelve null (Nothing en Visual Basic). | Método GetUser | Toma como entrada un nombre de usuario y un valor Boolean que especifican si debe actualizarse el valor de LastActivityDate del usuario para indicar que el usuario está conectado en la actualidad. El método GetUser devuelve un objeto MembershipUser que se rellena con los valores actuales del origen de datos del usuario especificado. Si el nombre de usuario no se encuentra en el origen de datos, el método GetUser devuelve null (Nothing en Visual Basic). | Método GetAllUsers | Devuelve una clase MembershipUserCollection que se rellena con los objetos MembershipUser de todos los usuarios del origen de datos. Los resultados devueltos por el método GetAllUsers están restringidos por los parámetros pageIndex y pageSize. El parámetro pageSize identifica el número máximo de objetos MembershipUser que se van devolver en la clase MembershipUserCollection. El parámetro pageIndex identifica qué pagina de resultados se va a devolver, donde 0 representa la primera página. El parámetro totalRecords es un parámetro out que se establece en el número total de usuarios de pertenencia. Por ejemplo, si hubiera 13 usuarios en la base de datos de la aplicación, si el valor de pageIndex fuera 1 y el de pageSize fuera 5, la colección MembershipUserCollection devuelta contendría el intervalo comprendido entre el sexto y el décimo usuario. El valor de totalRecords sería 13. | Método GetNumberOfUsersOnline | Devuelve un valor entero que es el recuento de todos los usuarios del origen de datos, donde el valor LastActivityDate es posterior a la fecha y hora actuales menos la propiedad UserIsOnlineTimeWindow. La propiedad UserIsOnlineTimeWindow es un valor entero que especifica el número de minutos que se utilizan cuando se determina si un usuario está conectado. | Método ResetPassword | Toma como entrada un nombre de usuario y una respuesta de contraseña, y genera una nueva contraseña aleatoria para el usuario especificado. El método ResetPassword actualiza la información del usuario en el origen de datos con el nuevo valor de la contraseña y devuelve la nueva contraseña como un objeto string. Un mecanismo apropiado para generar una contraseña aleatoria es el método GeneratePassword de la clase Membership. El método ResetPassword comprueba que la propiedad EnablePasswordReset está establecida en true antes de realizar cualquier acción. Si la propiedad EnablePasswordReset es false, se produce una excepción NotSupportedException. El método ResetPassword comprueba también el valor de la propiedad RequiresQuestionAndAnswer. Si la propiedad RequiresQuestionAndAnswer es true, el método ResetPassword compara el valor del parámetro de respuesta proporcionado con la respuesta de contraseña almacenada en el origen de datos. Si no coinciden, se produce una excepción MembershipPasswordException. El método ResetPassword provoca el evento ValidatingPassword, si se ha especificado un MembershipValidatePasswordEventHandler, para validar la contraseña que se acaba de generar y continúa o cancela la acción de restablecimiento de contraseña en función de los resultados del evento. Puede utilizar el método virtual OnValidatingPassword para ejecutar el MembershipValidatePasswordEventHandler especificado. | Método GetPassword | Toma como entrada un nombre de usuario y una respuesta de contraseña; a continuación, recupera la contraseña de ese usuario del origen de datos y devuelve esta contraseña como un objeto string. El método GetPassword comprueba que la propiedad EnablePasswordRetrieval está establecida en true antes de realizar cualquier acción. Si la propiedad EnablePasswordRetrieval es false, se produce una excepción ProviderException. El método GetPassword comprueba también el valor de la propiedad RequiresQuestionAndAnswer. Si el valor de RequiresQuestionAndAnswer es true, el método GetPassword compara el valor del parámetro de respuesta proporcionado con la respuesta de contraseña almacenada en el origen de datos. Si no coinciden, se produce una excepción MembershipPasswordException. | Método GetUserNameByEmail | Toma como entrada una dirección de correo electrónico y devuelve el primer nombre de usuario del origen de datos cuya dirección de correo electrónico coincide con el valor del parámetro email proporcionado. Si no se encuentra ningún nombre de usuario con una dirección de correo electrónico que coincida, se devuelve una cadena vacía. Si se encuentran varios nombres de usuario que coinciden con una dirección de correo electrónico, sólo se devuelve el primer nombre de usuario encontrado. | Método ChangePassword | Toma como entrada un nombre de usuario, la contraseña actual y una nueva contraseña, y actualiza la contraseña en el origen de datos si el nombre de usuario proporcionado y la contraseña actual son válidas. El método ChangePassword devuelve true si el usuario se ha actualizado correctamente; de lo contrario, devuelve false. El método ChangePassword genera el evento ValidatingPassword si se ha especificado un controlador MembershipValidatePasswordEventHandler, y continúa o cancela la acción de cambio de contraseña en función de los resultados del evento. Puede utilizar el método virtual OnValidatingPassword para ejecutar el MembershipValidatePasswordEventHandler especificado. | Método ChangePasswordQuestionAndAnswer | Toma como entrada un nombre de usuario, una contraseña, una pregunta de contraseña y una respuesta de contraseña, y actualiza la pregunta y la respuesta de contraseña en el origen de datos si el nombre de usuario y la contraseña proporcionados son válidos. El método ChangePasswordQuestionAndAnswer devuelve true si se actualizan correctamente la pregunta y la respuesta de contraseña; en caso contrario, devuelve false. Si el nombre de usuario y la contraseña proporcionados no son válidos, se devuelve false. | Método FindUsersByName | Devuelve una lista de usuarios de pertenencia donde el nombre de usuario coincide con el parámetro usernameToMatch proporcionado para la propiedad ApplicationName configurada. Por ejemplo, si el parámetro usernameToMatch se establece en "usuario", se devuelve "user1", "user2," "user3," etc. La compatibilidad del carácter comodín depende del origen de datos. Los usuarios se devuelven en orden alfabético por el nombre de usuario. Los resultados devueltos por el método FindUsersByName están restringidos por los parámetros pageIndex y pageSize. El parámetro pageSize identifica el número de objetos MembershipUser que se van devolver en la clase MembershipUserCollection. El parámetro pageIndex identifica qué pagina de resultados se va a devolver, donde 1 representa la primera página. El parámetro totalRecords es un parámetro out que se establece en el número total de usuarios de pertenencia que coinciden con el valor de usernameToMatch. Por ejemplo, si se encontraran 13 usuarios en los que usernameToMatch coincidiera con una parte o la totalidad del nombre de usuario, si el valor de pageIndex fuera 2 y el de pageSize fuera 5, la colección MembershipUserCollection contendría del sexto al décimo usuario devueltos. El valor de totalRecords sería 13. | Método FindUsersByEmail | Devuelve una lista de usuarios de pertenencia donde el nombre de usuario coincide con el parámetro emailToMatch proporcionado para la propiedad ApplicationName configurada. Por ejemplo, si el parámetro emailToMatch se establece en "address@example.com", se devolverían los usuarios con las direcciones de correo electrónico "address1@example .com", "address2@example .com", etc. La compatibilidad del carácter comodín depende del origen de datos. Los usuarios se devuelven en orden alfabético por el nombre de usuario. Los resultados devueltos por el método FindUsersByEmail están restringidos por los parámetros pageIndex y pageSize. El parámetro pageSize identifica el número de objetos MembershipUser que se van devolver en la colección MembershipUserCollection. El parámetro pageIndex identifica qué pagina de resultados se va a devolver, donde 1 representa la primera página. El parámetro totalRecords es un parámetro out que se establece en el número total de usuarios de pertenencia que coinciden con el valor de emailToMatch. Por ejemplo, si se encontraran 13 usuarios en los que emailToMatch coincidiera con una parte o la totalidad del nombre de usuario, si el valor de pageIndex fuera 2 y el de pageSize fuera 5, la colección MembershipUserCollection contendría del sexto al décimo usuario devueltos. El valor de totalRecords sería 13. | Método UnlockUser | Toma como entrada un nombre de usuario y actualiza el campo en el origen de datos que almacena la propiedad IsLockedOut a false. El método UnlockUser devuelve true si se actualiza correctamente el registro del usuario de pertenencia; de lo contrario, devuelve false. |

ApplicationName
Los proveedores de pertenencias almacenan únicamente la información del usuario de cada aplicación. De este modo, varias aplicaciones ASP.NET pueden utilizar el mismo origen de datos sin que se produzcan conflictos si se utilizan nombres de usuario creados. O bien, varias aplicaciones ASP.NET pueden utilizar el mismo origen de datos de usuario si especifican el mismo valor para la propiedad ApplicationName. Como los proveedores de pertenencias almacenan por separado la información de usuario de cada aplicación, deberá comprobar que el esquema de datos incluye el nombre de la aplicación, y que éste también se incluye en las consultas y las actualizaciones. Por ejemplo, el comando siguiente se utiliza para recuperar un nombre de usuario de una base de datos, en función de la dirección de correo electrónico, y comprueba que la propiedad ApplicationName está incluida en la consulta.
SELECT Username FROM MyUserTable
WHERE Email = 'someone@example.com' AND ApplicationName = 'MyApplication'

Miembros personalizados
Quizás necesite ampliar las interfaces de los proveedores de pertenencias con funciones adicionales que no proporcionan las clases abstractas ProviderBase y MembershipProvider. Podrá obtener acceso a cualquier miembro público que agregue al proveedor de pertenencias utilizando las propiedades Provider o Providers de la clase Membership. Un ejemplo podría ser un método LockUser que establece la propiedad IsLockedOut en true. En el ejemplo siguiente, se muestra cómo convertir la propiedad Provider, que expone el proveedor de pertenencia predeterminado de una aplicación, como un tipo de proveedor personalizado para llamar al método LockUser personalizado.
Dim p As MyCustomProvider = CType(Membership.Provider, MyCustomProvider)
p.LockUser(username)
MyCustomProvider p = (MyCustomProvider)Membership.Provider;
p.LockUser(username);

Seguridad para subprocesos
Para cada proveedor de pertenencias especificado en la configuración de una aplicación, ASP.NET crea una única instancia del proveedor de pertenencias que se utiliza para todas las solicitudes de las que se ocupa un objeto HttpApplication. Por tanto, puede tener varias solicitudes ejecutándose simultáneamente. ASP.NET no garantiza la seguridad para subprocesos de las llamadas a su proveedor. Deberá escribir el código del proveedor para que sea seguro para subprocesos. Por ejemplo, si crea una conexión a una base de datos o abre un archivo para su edición, debe hacerlo dentro del miembro al que se ha llamado, como el método MembershipProvider..::.CreateUser, en lugar de abrir un archivo o una conexión a la base de datos cuando se llama al método Initialize.

Vea también
ReferenciaConceptosOtros recursos
|