我想在ASP.NET MVC5中以编程方式记录用户。我正在设置这样的身份验证Cookie:
FormsAuthentication.SetAuthCookie(username, true);
我觉得这就够了。但后来我想检查Request.IsAuthenticated的值,它总是假的。另外,当我检查User.Identity.Name的值时,我得到的是空字符串,而不是我之前传递的用户名。
我该怎么做才能使这项工作正确设置?
编辑: 还有一件事。我没有使用任何登录表单,我从不同的应用程序传递用户数据(登录和令牌)。
答案 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>