I have been testing this new feature with some trouble. Here is what I do.
Firstly, I inherit the PgSqlMembershipProvider to my class and that way I am able to set the connectionString property you implemented. After that, I tried 2 approaches to create a user: Membership.CreateUser and base.CreateUser.
What I think is that I should use the base.CreateUser method because I see that the Membership.CreateUser still gets information about the connection string from the membership section in web.config. When I use the Membership.CreateUser method I get an error as follows (message and stack):
An exception occurred. Please contact your administrator.
at Devart.Common.Web.Providers.DbMembershipProvider.CreateUser(String username, String password, String email, String passwordQuestion, String passwordAnswer, Boolean isApproved, Object userId, MembershipCreateStatus& status)
at System.Web.Security.Membership.CreateUser(String username, String password, String email, String passwordQuestion, String passwordAnswer, Boolean isApproved, Object providerUserKey, MembershipCreateStatus& status)
at System.Web.Security.Membership.CreateUser(String username, String password, String email, String passwordQuestion, String passwordAnswer, Boolean isApproved, MembershipCreateStatus& status)
at Usuarios.Inserta(String& strMensaje, String strOrigen) in d:\Visual Studio 2010 Projects\ePYMES\App_Code\Usuarios.cs:line 114
So, I decided to use base.CreateUser and this is a sample of my code. No exception is thrown but I get a MembershipCreateStatus of InvalidPassword. If I use the base.CreateUser method, are the parameters in the web.config's membership section taken into account? Why do I get the InvalidPassword status and how can I get a Success status? Do I need to set additional properties? I see that most of them are read-only. I will very much appreciate your advice.
Code: Select all
public class Usuarios : PgSqlMembershipProvider
{
// Here go the properties.
public void Inserta(ref String strMensaje, String strOrigen)
{
MembershipCreateStatus Estatus;
String strConn = "";
Object objUserID = String.Empty;
try
{
// I get a connection string name from web.config based on the user logged on.
strConn = ConnStrings.ObtenerConnString_ePYMES();
// I get the connection string parameters of the connection string name.
strConn = System.Configuration.ConfigurationManager.ConnectionStrings[strConn].ToString();
// I add the dababase name to the connection string. Our app connects to different databases with the same schema.
strConn += ";Database=" + HttpContext.Current.Session["sesBaseDatos"];
// I set the connectionString property of the PgSqlMembershipProvider.
base.connectionString = strConn;
// The user is created.
base.CreateUser(this.NombreUsuario, this.ClaveAcceso, this.CorreoElectronico, this.PreguntaSecreta, this.Respuesta, true,objUserID, out Estatus);
// Check for the status of the create user operation.
switch (Estatus)
{
case MembershipCreateStatus.Success:
strMensaje += "SU CUENTA DE USUARIO SE HA CREADO SATISFACTORIAMENTE.";
break;
case MembershipCreateStatus.DuplicateEmail:
strMensaje += "LA DIRECCION E CORREO ELECTRONICO QUE DESEA REGISTRAR ";
strMensaje += "YA EXISTE EN LA BASE DE DATOS. INTENTE CON OTRA DIFERENCTE.";
break;
case MembershipCreateStatus.DuplicateUserName:
strMensaje += "EL NOMBRE DE USUARIO YA EXISTE EN NUESTRO SISTEMA, ";
strMensaje += "SELECCIONE OTRO E INTENTE NUEVAMENTE.";
break;
case MembershipCreateStatus.InvalidAnswer:
strMensaje += "LA RESPUESTA A LA PREGUNTA SECRETA ES INVALIDA, ES POSIBLE ";
strMensaje += "QUE CONTENGA CARACETRES NO PERMITIDOS.";
break;
case MembershipCreateStatus.InvalidEmail:
strMensaje += "LA DIRECCION DE CORREO ELECTRONICO ES INVALIDA, VERIFIQUE QUE ";
strMensaje += "SE HAYA ALIMENTADO EN EL FORMATO CORRECTO.";
break;
case MembershipCreateStatus.InvalidPassword:
strMensaje += "LA CLAVE DE ACCESO ES INVALIDA. DEBE CONTENER POR LO MENOS ";
strMensaje += Convert.ToString(Membership.MinRequiredPasswordLength) + " CARACTERES.";
break;
case MembershipCreateStatus.InvalidQuestion:
strMensaje += "LA PREGUNTA SECRETA ES INVALIDA, ES POSIBLE ";
strMensaje += "QUE CONTENGA CARACTERES NO PERMITIDOS.";
break;
case MembershipCreateStatus.InvalidUserName:
strMensaje += "EL NOMBRE DE USUARIO ES INVALIDO, ";
strMensaje += "VERIFIQUE QUE LO HAYA ALIMENTADO CORRECTAMENTE. ";
break;
case MembershipCreateStatus.DuplicateProviderUserKey:
strMensaje += "EL IDENTIFICADOR DE USUARIO YA EXISTE EN LA BASE DE DATOS, ";
strMensaje += "INTENTE SU REGISTRO CON OTRO NOMBRE DE USUARIO.";
break;
case MembershipCreateStatus.InvalidProviderUserKey:
strMensaje += "EL IDENTIFICADOR DE USUARIO QUE SE HA GENERADO ES INVALIDO, ";
strMensaje += "INTENTE SU REGISTRO CON OTRO NOMBRE DE USUARIO. ";
break;
case MembershipCreateStatus.UserRejected:
strMensaje += "NO FUE POSIBLE CREAR LA CUENTA DE USUARIO, ";
strMensaje += "INTENTE SU REGISTRO CON OTRO NOMBRE DE USUARIO.";
break;
case MembershipCreateStatus.ProviderError:
strMensaje += "HA OCURRIDO UN ERROR DESCONOCIDO, ";
strMensaje += "INTENTE SU REGISTRO CON OTRO NOMBRE DE USUARIO.";
break;
}
}
catch (Exception error)
{
strMensaje += error.StackTrace;
}
}
}