3

我写了一个如下的控制器:

public class AccountController : Controller
{
    public ActionResult Login(/*---*/)
    {
        GenericIdentity identity = new GenericIdentity("userName");
        GenericPrincipal principal = new GenericPrincipal(identity, new string[] { "role1", "role2" });
        this.HttpContext.User = principal;
        /*---*/;
    }
}

登录后,我可以在其他控制器中通过 User.Identity.Name 获取用户名。但是 User.IsInRole("role1") 总是返回 false。

如何为用户分配值,我不想使用会员资格...

4

2 回答 2

5

您需要将用户数据保存在某处,以便所有后续页面请求都可以访问它。通常您会创建一个身份验证票证并将其存储在 cookie 中。然后为每个请求提取数据并创建 IPrincipal。这可以在Application_AuthenticateRequestGlobal.ascx 的方法中完成,

MVC - 如何存储/分配经过身份验证的用户的角色有更多关于做你想做的简单方法的信息。

于 2010-03-09T13:46:45.230 回答
1

嗯。

使用会员?

至少是较低级别的 API。您需要在某些事件中为其分配一个主体(基本上变成一个 cookie 并在每次调用时反序列化)。

详细信息在http://support.microsoft.com/kb/306590

或者也可以在 http://msdn.microsoft.com/en-us/library/aa302399.aspx

于 2010-03-09T12:34:06.250 回答