簡體   English   中英

無法在第二個成員資格提供商中獲取個人資料和角色

[英]Cannot Get Profile And Role In Second Membership Provider

我在我的應用程序中使用了兩個會員提供商,當用戶輸入用戶名和密碼時,它應該在第一個會員提供商中檢查用戶名,如果不是在第一個提供商中,則只在第二個會員提供商中搜索用戶名。 但問題是,每次搜索第二個成員資格提供者時,配置文件和角色提供者仍然是第一個提供者。 我在代碼中做錯了什么? 下面是我的代碼:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
    MembershipProvider ProviderName = Membership.Providers["MySqlMembershipProvider2"];


    if (Membership.ValidateUser(Login1.UserName, Login1.Password) == true)
    {
        e.Authenticated = true;
        Login1.DestinationPageUrl = "~/Start.aspx";
    }
    else
    {
        if (Membership.Providers["MySqlMembershipProvider2"].ValidateUser(Login1.UserName, Login1.Password) == true)
        {

            RoleProvider RoleName= Roles.Providers["MySqlRoleProvider2"];
            ProviderName.GetUser(Login1.UserName,true);
            e.Authenticated = true;
            Login1.DestinationPageUrl = "~/CL/CLLogin.aspx";
        }
        else
        {
            e.Authenticated = false;
        }
    }
}

網絡配置:

<roleManager defaultProvider="MySQLRoleProvider" enabled="true">
    <providers>
    <clear/>
    <add name="MySQLRoleProvider" connectionStringName="MySQLMembershipConnection" applicationName="/" type="MySql.Web.Security.MySQLRoleProvider" autogenerateschema="true"/>
    <add name="MySQLRoleProvider2" connectionStringName="MySQLMembershipConnection2" applicationName="/" type="MySql.Web.Security.MySQLRoleProvider" autogenerateschema="true"/>
  </providers>
</roleManager>
<anonymousIdentification enabled="true"/>
<membership defaultProvider="MySQLMembershipProvider">
  <providers>
    <clear/>
    <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider" connectionStringName="MySQLMembershipConnection" autogenerateschema="true" applicationName="/" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"/>
    <add name="MySQLMembershipProvider2" type="MySql.Web.Security.MySQLMembershipProvider" connectionStringName="MySQLMembershipConnection2" autogenerateschema="true" applicationName="/" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"/>
  </providers>
</membership>
<profile defaultProvider="MySQLProfileProvider">
  <providers>
    <clear/>
    <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySqlProfileProvider" applicationName="/" connectionStringName="MySQLMembershipConnection" autogenerateschema="true"/>
    <add name="MySQLProfileProvider2" type="MySql.Web.Profile.MySqlProfileProvider" applicationName="/" connectionStringName="MySQLMembershipConnection2" autogenerateschema="true"/>
  </providers>
  <properties>
    <add name="FullName" provider="MySQLProfileProvider"/>
    <add name="FName" provider="MySQLProfileProvider"/>
    <add name="ClassName" provider="MySQLProfileProvider2"/>
    <add name="Area" provider="MySQLProfileProvider2"/>
  </properties>
</profile>
<sessionState>
  <providers>
    <add name="MySqlSessionStateStore" type="MySql.Web.SessionState.MySqlSessionStateStore,MySql.Web"/>
    <add name="MySqlSessionStateStore2" type="MySql.Web.SessionState.MySqlSessionStateStore,MySql.Web"/>
  </providers>
</sessionState>

您的 login_authenticate 未正確實現,您需要使用兩個提供程序進行身份驗證。 首先檢查默認提供程序(if case),然后根據第二個提供程序(在 if else 中)語句進行身份驗證。 這是一個代碼示例。 您不需要在身份驗證方法的開頭對 provider2 進行硬編碼。

代碼示例:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        bool foundUser = false;
        List<string> roles = new List<string>();
        roles.Add("GeneralUser");
        // this will call the default MembershipProvider
        if (Membership.Provider.ValidateUser(LoginBox.UserName, LoginBox.Password))
        {
            foundUser = true;
            // do any additional lookups for this type of user (Default MembershipProvider) here
        } // otherwise, explicitly call secondary provider
        else if (
            Membership.Providers["SecondarySqlMembershipProvider"].ValidateUser(LoginBox.UserName,
                                                                                LoginBox.Password))
        {
            foundUser = true;
            roles.Add("SecondaryUser");
            // do any additional lookups relevant to this type of user
        }
        if (foundUser)
        {
            Session["UserId"] = LoginBox.UserName;
            Session["Groups"] = roles;
        }
        e.Authenticated = foundUser;
    }

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM