找不到用户的FormsAuthentication角色

时间:2013-02-07 00:27:08

标签: asp.net asp.net-mvc asp.net-mvc-4 forms-authentication

我的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上填充了我的值,它们也无处可存储!

3 个答案:

答案 0 :(得分:1)

这很有趣。 Roles.AddUserToRole采用字符串(username)和角色(rolename)。您正确地将角色作为字符串传递,但错误地传递了userid而不是用户名。

更改您的代码:

Roles.AddUserToRole({username}, "Admin");

答案 1 :(得分:0)

我遇到了同样的问题。我更改了 Web.Config 中某些属性的 applicationName 值。如果更改了它,则必须更改所有应用程序变量值。

我改变了一切,现在没事了。

答案 2 :(得分:-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" />