-4

FormsAuthenticationに問題があります。何らかの理由で、ユーザーにロールを付与しようとすると、「ユーザー「X」が見つかりませんでした。」というエラーが表示されます。以前にユーザーに行を追加したばかりなので、このエラーは意味がありません。

次のコード

FormsAuthentication.SetAuthCookie(member.Id.ToString(), true);
Roles.AddUserToRole(member.Id.ToString(), "Admin");

エラーが発生します(member.Idは3です)

The user '3' was not found

編集:ユーザー名が実際にユーザー名である必要はありません。FormsAuthenticationでユーザーのユーザー名として設定したものと一致する必要があります。代わりにユーザーIDを使用する(文字列に変換する)のが一般的な方法です!しかし、この用量でも問題は変わらないので、ユーザーの名前は「3」です。

これは、ユーザーログイン時に行われます。

// Set roles
foreach(var r in Roles.GetRolesForUser(user.Id.ToString()))
    Roles.RemoveUserFromRole(user.Id.ToString(), r);
IList<UserRole> roles = _usersServices.GetUserRoles((int)user.Id);
foreach (var userRole in roles)
{
    if(userRole.Expires == null || userRole.Expires > DateTime.Now)
    {
        if(!Roles.RoleExists(userRole.Name))
            Roles.CreateRole(userRole.Name);
        Roles.AddUserToRole(user.Id.ToString(), userRole.Name);
    }
}

解決策:問題は、web.configでroleManagerを設定するのを忘れていたため、userloginで値を入力しても、保存する場所がないことでした。

4

3 に答える 3

1

これは面白い。文字列( )とロール()をRoles.AddUserToRole取ります。ロールを文字列として正しく渡していますが、ユーザー名の代わりに誤って渡しています。usernamerolenameuserid

コードを変更します。

Roles.AddUserToRole({username}, "Admin");
于 2013-02-07T01:32:32.293 に答える
0

同じ問題が発生しました。Web.Configの一部のプロパティのapplicationName値が変更されました。変更した場合は、すべてのアプリケーション変数の値を変更する必要があります。

全部変えて、今は大丈夫です。

于 2016-02-28T13:22:21.890 に答える
-1

でロールマネージャーを変更しましたがweb.config、現在は機能しています。

そうだった:

<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
    <providers>
        <add
            name="DefaultRoleProvider"
            type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
            connectionStringName="DefaultConnection"
            applicationName="/" />
    </providers>
</roleManager>

今では:

<roleManager
    enabled="true"
    cacheRolesInCookie="true"
    cookieName=".ASPXROLES"
    cookieTimeout="30"
    cookiePath="/"
    cookieRequireSSL="false"
    cookieSlidingExpiration="true"
    cookieProtection="All"
    defaultProvider="AspNetSqlRoleProvider"
    createPersistentCookie="false"
    maxCachedResults="25" />
于 2013-02-08T10:35:29.133 に答える