El siguiente código de muestra C# demuestra cómo configure a .NET membership provider programmatically por Jacques L. Chereau. Este código requiere que también configure a connection string nombrado MyDatabase
NameValueCollection objConfig = new NameValueCollection();
objConfig.Add("connectionStringName", "MyDatabase");
objConfig.Add("enablePasswordRetrieval", "false");
objConfig.Add("enablePasswordReset", "true");
objConfig.Add("requiresQuestionAndAnswer", "true");
objConfig.Add("applicationName", "MyApp");
objConfig.Add("requiresUniqueEmail", "true");
objConfig.Add("maxInvalidPasswordAttempts", "5");
objConfig.Add("passwordAttemptWindow", "10");
objConfig.Add("commandTimeout", "30");
objConfig.Add("passwordFormat", "Hashed");
objConfig.Add("name", "AspNetSqlMembershipProvider");
objConfig.Add("minRequiredPasswordLength", "8");
objConfig.Add("minRequiredNonalphanumericCharacters", "2");
objConfig.Add("passwordStrengthRegularExpression", "(?=^.{8,25}$)(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[[email protected]#$%^&*()_+}{\\":;'?/>.<,])(?!.*\\s).*$"));
SqlMembershipProvider objSqlMembershipProvider = new SqlMembershipProvider();
objSqlMembershipProvider.Initialize(objConfig["name"], objConfig);
MembershipProviderCollection colMembershipProviders = new MembershipProviderCollection();
colMembershipProviders.Add(objSqlMembershipProvider);
colMembershipProviders.SetReadOnly();
BindingFlags enuBindingFlags = BindingFlags.NonPublic | BindingFlags.Static;
Type objMembershipType = typeof(Membership);
objMembershipType.GetField("s_Initialized", enuBindingFlags).SetValue(null, true);
objMembershipType.GetField("s_InitializeException", enuBindingFlags).SetValue(null, null);
objMembershipType.GetField("s_HashAlgorithmType", enuBindingFlags).SetValue(null, "SHA1");
objMembershipType.GetField("s_HashAlgorithmFromConfig", enuBindingFlags).SetValue(null, false);
objMembershipType.GetField("s_UserIsOnlineTimeWindow", enuBindingFlags).SetValue(null, 15);
objMembershipType.GetField("s_Provider", enuBindingFlags).SetValue(null, objSqlMembershipProvider);
objMembershipType.GetField("s_Providers", enuBindingFlags).SetValue(null, colMembershipProviders);
Asumiendo que tiene las siguientes referencias de biblioteca:
using System.Web.Security;
using System.Collections.Specialized;
using System.Reflection;
EDIT:
Este método establece la cadena de conexión de los proveedores de pertenencia temprana suficiente en el ciclo de vida de la solicitud
private void SetMembershipProviderConnectionString(string connectionString)
{
// Set private property of Membership. Untested code!!
var connectionStringField = Membership.Provider.GetType().GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
if (connectionStringField != null)
connectionStringField.SetValue(Membership.Provider, connectionString);
}
No probado pero llamando a este método desde Global.asax.cs dentro de Application_PreRequestHandlerExecute
hace el trabajo.
¿Pero cómo establecer la cadena de conexión? Necesito referirme a la cadena de conexión del código que no está en el web.config, quiero decir que necesito que la membresía lea la cadena de conexión del código no del archivo web.config. Entonces, de su código no puedo encontrar cómo se admite la cadena de conexión a la membresía? No necesito escribir una cadena de conexión en el archivo web.config – Ahmy
He editado mi respuesta para incluir el método – chridam
Muchas gracias, funciona correctamente, ya que deseo agradecer nuevamente. – Ahmy