簡體   English   中英

成員資格角色提供程序不能與自定義連接字符串一起使用?

[英]Membership Role Provider doesn't work with custom connection string?

請幫助一個問題。 我使用IIS7配置了成員資格,其成員表位於我自己的數據庫中,使用aspnet_regsql實用程序創建,並且正在使用自定義連接字符串來訪問它。

這是與Membership相關的web.config的一部分:

<connectionStrings>
    <add connectionString="Server=CORESERVER\SQLExpress;Database=Shop;User ID=Tema;Password=Matrix" name="CustomSqlConnection" />
</connectionStrings>
<profile enabled="true">
      <providers>
        <add name="CustomSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="CustomSqlConnection" />
      </providers>
</profile>
<roleManager defaultProvider="AspNetSqlRoleProvider" enabled="true">
      <providers>
        <add name="CustomSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="CustomSqlConnection" />
      </providers>
</roleManager>
<membership defaultProvider="CustomSqlMemberProvider">
      <providers>
        <add name="CustomSqlMemberProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="CustomSqlConnection" enablePasswordReset="true" enablePasswordRetrieval="false" passwordFormat="Hashed" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" applicationName="/" maxInvalidPasswordAttempts="10" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
      </providers>
</membership>
<authentication mode="Forms">
      <forms cookieless="UseCookies" loginUrl="login.aspx" name="WebShopAuthentication" protection="All" timeout="30" path="/" requireSSL="false" defaultUrl="~/admin/default.aspx" />
</authentication>
<authorization>
      <allow users="*" />
</authorization>

並且...表單授權,獲取用戶及其會員信息是可以的。 但是……獲得角色總是錯誤的。

MembershipUser userData = Membership.GetUser(HttpContext.Current.User.Identity.Name);    // OK !!! IT IS GREAT :)
var a = new RolePrincipal(HttpContext.Current.User.Identity);
var aa = a.getRoles();  // {string[0]} - EMPTY!!!
var b = Roles.IsUserInRole("Administrator", "Administrator");  // FALSE!!!
var c = Roles.Providers["CustomSqlRoleProvider"].GetAllRoles();  // {string[0]} - EMPTY!!!
var d = Roles.IsUserInRole(HttpContext.Current.User.Identity.Name, "Administrator"); // FALSE!!!
var e = HttpContext.Current.User.IsInRole("Administrator"); // FALSE !!!

WHYYYY ???

我究竟做錯了什么???

只是為了完善……授權可以正常工作並正確使用角色。 我的web.config的另一部分:

<location path="Admin">
    <system.web>
      <pages styleSheetTheme="Admin" theme="Admin">
      </pages>
      <authorization>
        <deny users="?" />
        <allow roles="Administrator" />
      </authorization>
    </system.web>
    <appSettings>
      <add key="ThemeName" value="Admin" />
    </appSettings>
</location>

然后在代碼中使用:

Membership.ValidateUser(userName.Text, userPassword.Text) // AND IT WORKS - USER IS LOGGED IN

答案是我沒有正確將applicationName參數添加到web.config-添加后,我應重新啟動IIS,並在需要時重新創建角色。 這是web.config的最終版本:

<roleManager defaultProvider="CustomSqlRoleProvider" enabled="true">
      <providers>
        <add name="CustomSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="CustomSqlConnection" applicationName="/" />
      </providers>
    </roleManager>

暫無
暫無

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

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