从使用授权的默认Asp.net 5 MVC
模板开始,我尝试检查User
控制器操作中的Login
声明。
我无法理解的是User.IsSignedIn()
何时成为true
。
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
if (User.IsSignedIn())
/* more code */
}
在上面的代码User.IsSignedIn()
中返回false
但是在此之后的行动中,它重新回归true
签名真的发生在哪里?
我希望它能在_signInManager.PasswordSignInAsync
期间完成,但显然不会。{/ p>
答案 0 :(得分:1)
由于ASP.NET身份验证基于Cookie,如果为当前请求设置了身份验证Cookie,User.IsSignedIn()
方法将返回true
。此cookie由_signInManager.PasswordSignInAsync(..)
创建,并存储在操作方法的响应(而不是请求)中。
下一个操作方法会在请求中收到Cookie,这就是为什么您会在该方法中看到User.IsSignedIn()
返回true
而不是实际执行登录的方法。