我在该表单中有一个弹出窗体我使用jquery UI对话框加载我的登录视图。当单击Login按钮时,我使用ajax post调用Account / Login操作。这是我的代码:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
//IsAuthenticated is returns false
bool isAuthenticated= User.Identity.IsAuthenticated;
return PartialView("_LoginPartial");
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
在调用SignInAsync方法之后,User.Identity.IsAuthenticated返回false为什么会发生这种情况?
感谢您提供的任何帮助。如果您需要任何其他信息来帮助回答此问题,请与我们联系
答案 0 :(得分:4)
这是因为asp.net管道尚未对用户进行身份验证。
User.Identity.IsAuthenticated
值基于HttpContext.Current。应该发生的事情是SignInAsync
将添加一个框架将用于验证未来请求的cookie。
因此,此控制器操作被击中后。 User.Identity.IsAuthenticated
将在所有控制器操作中成立。 AuthorizeAttribute
基于此。
要获取用户名,我会查看UserManager.FindAsync
已返回的用户属性,即
var userName = user.UserName