2

ユーザーをロールに登録しようとしていますが、次のエラーが発生します。

No user found was found that has the name "MyName"

デフォルトのテンプレートを使用してMVC4アプリケーションを作成しました。

カスタムメンバーシッププロバイダーを作成し、次のようにCreateUserメソッドを実装しました

public User CreateUser(User i_userToCreate)
    {

        using (var _db = new Repository())
        {

           User _user = _db.CreateUser(i_userToCreate);
           MembershipUser _membershipUser = new MembershipUser(providerName: "ATWMembershipProvider",
           name: _user.UserName,
           providerUserKey: null,
           email: _user.Email,
           passwordQuestion: "",
           comment: "",
           isApproved: true,
           isLockedOut: false,
           creationDate: DateTime.UtcNow,
           lastLoginDate: DateTime.UtcNow,
           lastActivityDate: DateTime.UtcNow,
           lastPasswordChangedDate: DateTime.UtcNow,
           lastLockoutDate: DateTime.UtcNow);

           return _user;
        }

これが私のweb.configの設定方法です

<appSettings>
<add key="enableSimpleMembership" value="false"/>
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
<system.web>
<membership defaultProvider="ATWMembershipProvider">
  <providers>
    <clear/>
    <add name="ATWMembershipProvider" type="AroundTheWorld.Infrastructure.ATWMembershipProvider"
         enablePasswordRetrieval="false"
         ConnetionStringName="Context"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="false"
         equiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5"
         minRequiredPasswordLength="6"
         minRequiredNonalphanumericCharacters="0"
         passwordAttemptWindow="10" applicationName="myApplication" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
  <providers>
    <remove name="AspNetSqlRoleProvider" />
    <add name="AspNetSqlRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <!-- note: WebMatrix registers SimpleRoleProvider with name
     'AspNetSqlRoleProvider'. I don't know why but i kept it. -->
  </providers>
</roleManager>

これで、認証方法は次のようになります。

 var MembershipProvider = new ATWMembershipProvider();
            User authentictedUser = MembershipProvider.CreateUser(_userToCreate);

            FormsAuthentication.SetAuthCookie(authentictedUser.UserName, true);
            System.Web.Security.Roles.AddUserToRole(authentictedUser.UserName, authentictedUser.Role.Name);
            Session.Add("UserID", authentictedUser.ID);
            Session.Add("UserName", authentictedUser.UserName);

私はすでに以下をチェックしました:

  1. 必要なすべての情報としてのマイユーザー
  2. App_start "user"、"admin"に2つの役割を登録しました

しかし、「MyName」という名前のユーザーが見つからないというエラーが引き続き表示されます。

ロールに基づいてフォルダを保護するために必要ではなかったaspWebフォーム

私がやろうとしているのは、コントローラー内のアクションを特定の「役割」に固定することだけです。

[Authorize(Roles = "admin")]
    public ActionResult GetAllLocations()
    {
        using (var _db = new Repository())
        {
            return View(_db.GetLocations());
        }
    }
4

1 に答える 1

2

問題を修正しました...

問題は、ロールプロバイダーなしでカスタムメンバーシッププロバイダーのみを実装したためです。

私はこのブログをフォローしました。

基本的に、とMyOwnRoleProviderを継承するクラスを作成しましたRoleProvider

  1. と呼ばれるメソッドを実装しましたGetRolesForUser
  2. と呼ばれるメソッドを実装しましたGetUsersInRole

最後に、web.configを次のように変更しました

<roleManager defaultProvider="ATWRoleProvider" enabled="true" cacheRolesInCookie="true">
  <providers>
    <clear />
    <add name="ATWRoleProvider" type="AroundTheWorld.Infrastructure.ATWRoleProvider, AroundTheWorld" connectionStringName="Context" />
  </providers>
</roleManager>

その後、以下を使用することができました

[Authorize(Roles="admin")]
public ActionResult GetAllLocations()
{
  using (var _db = new Repository())
  {
    return View(_db.GetLocations());
  }
}

@if (User.IsInRole("user"))

誰かのお役に立てば幸いです...

于 2013-01-01T10:18:52.113 に答える