在ASP.NET MVC5中以编程方式设置用户

时间:2014-07-08 16:29:42

标签: c# asp.net asp.net-mvc

我想在ASP.NET MVC5中以编程方式记录用户。我正在设置这样的身份验证Cookie:

FormsAuthentication.SetAuthCookie(username, true);

我觉得这就够了。但后来我想检查Request.IsAuthenticated的值,它总是假的。另外,当我检查User.Identity.Name的值时,我得到的是空字符串,而不是我之前传递的用户名。

我该怎么做才能使这项工作正确设置?

编辑: 还有一件事。我没有使用任何登录表单,我从不同的应用程序传递用户数据(登录和令牌)。

2 个答案:

答案 0 :(得分:11)

MVC5带有Identity而不是旧的SimpleMembership和ASP.NET Membership。身份不使用表单身份验证,因此您正在做的事情没有效果。

要通过身份登录用户,首先,您需要一个实际的用户实例,您可以通过执行以下操作来获取该实例:

var userManager = new UserManager<ApplicationUser>(context); 
var user = userManager.FindByName(username);

然后,如果您有有效用户(user != null),则需要通过以下方式为该用户生成声明标识:

var identity = UserManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);

最后,您可以使用该身份在以下位置对用户进行签名:

var authenticationManager = HttpContext.GetOwinContext().Authentication;
authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);

(如果您想要持久登录,请将其更改为true

答案 1 :(得分:2)

确保在web.config文件中启用了表单身份验证。

<system.web>
<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
...
</system.web>