Моим требованием приложения является одно приложение & несколько баз данных для каждого клиента. Поэтому я реализовал пользовательское членство для достижения этого. Сначала я проверяю, принадлежит ли пользователь, к какому клиенту в соответствии со строкой подключения этого db клиента я динамически устанавливаю строку подключения &.Я столкнулся с «Ваша попытка входа не была успешной». Повторите попытку. ошибка при внедрении пользовательского членства
Вот мой веб-конфигурации:
<membership defaultProvider="EPMembershipProvider" userIsOnlineTimeWindow="20">
<providers>
<clear />
<add name="EPMembershipProvider" type="EfficientPeople.GlobalClasses.EPMembershipProvider" connectionStringName="DBEntitiesConnectionString" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="25" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" />
<!--<add name="EPMembershipProvider" type="EfficientPeople.GlobalClasses.EPMembershipProvider, EfficientPeople" connectionStringName="DBEntitiesConnectionString" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="25" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" />-->
</providers>
</membership>
<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="DBEntitiesConnectionString" applicationName="/" />
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="DBEntitiesConnectionString" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
<add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
CustomMembership Класс:
public class EPMembershipProvider : SqlMembershipProvider
{
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
{
base.Initialize(name, config);
// Update the private connection string field in the base class.
Int64 ClientId = Convert.ToInt64(HttpContext.Current.Session["_clientId"]);
if (ClientId > 0)
{
UserLoginML objUL = new UserLoginML();
//string _dbMembershipConnStr = ManageSessionFacade._dbMembershipConnStr;
string _dbMembershipConnStr = HttpContext.Current.Session["_dbMembershipConnStr"].ToString();
//string connectionString = ManageSessionVariable.Current._dbContextConnStr;
if (_dbMembershipConnStr != "" && _dbMembershipConnStr != "db_not_validate" && _dbMembershipConnStr != "db_not_exist")
{
try
{
// Set private property of Membership provider.
//FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
//connectionStringField.SetValue(this, _dbMembershipConnStr);
FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
if (connectionStringField != null)
connectionStringField.SetValue(this, _dbMembershipConnStr);
//Set role provider
var roleField = Roles.Provider.GetType().GetField("_sqlConnectionString", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (roleField != null)
roleField.SetValue(Roles.Provider, _dbMembershipConnStr);
//Set Profile Provider
var profileField = ProfileManager.Provider.GetType().GetField("_sqlConnectionString", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (profileField != null)
profileField.SetValue(ProfileManager.Provider, _dbMembershipConnStr);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
Когда я работает мое приложение локально, когда я войти в систему с клиентом А [DB1] -User1 является логины успешно. Но когда я выйти из системы и пытается войти в систему с Client B [DB2] Пользователь2 оно проливает это сообщение об ошибке:
Ваша попытка Войти не была успешной
Когда я снова запустить приложение & я наоборот то есть. войдите в систему с клиентом B [DB2] -User2, он успешно зарегистрирован, но когда я пытаюсь использовать клиент A [DB1] -User1 в одном приложении, он вызывает такую же ошибку. Но я могу войти в систему с клиентами B [DB2].
Когда я отлажена с точки останова он выдает ошибку на
ValidateUser (строка, строка Псевдоним Passwd)
метода. Метод ValidateUser возвращает false.
Я пробовал много вариантов, но ничего не работает. Прошу вас, провери меня.
Можете ли вы включить функцию ValidateUser(), так как это функция, вызывающая ошибку? –
Я использую метод класса Membership для проверки: bool Status = Membership.ValidateUser (UserName, Password); , который присутствует в: namespace System.Web.Security public static class Membership { public static bool ValidateUser (string username, string password); } – Tukaram
Можете ли вы проверить, проверен ли пользователь, что он был проверен на предмет изменений между попытками входа в систему или если он все еще застрял на встроенном пользователе. –