Mar*_*ara 8 asp.net-mvc asp.net-mvc-5 asp.net-identity-2
我正在尝试使用MVC 5的身份解决方案,但却陷入了一些非常简单的问题:我希望AccountController上的登录方法在验证模型后立即获取loged用户的名字(我不想从模型中使用它!).
这是我的一段代码:
var result = await SignInManager.PasswordSignInAsync(model.Login, model.Password, false, shouldLockout: false);
string NomeUsuario = "";
if (result == SignInStatus.Success)
{
NomeUsuario = User.Identity.Name; //<== getting the logged user's name
}
Run Code Online (Sandbox Code Playgroud)
我得到的问题是这个属性为null.
经过大量的测试,我发现了一些奇怪的事情:如果我进行了两次身份验证,那么在第二次传递时,它会起作用.但每次我注销并尝试再次登录时,它将在用户名上显示为null.
有什么问题的帮助吗?
在其执行链SignInManager.PasswordSignInAsync方法的最后,调用SignInAsync方法,该方法基本上负责设置包含关于用户的多个声明的身份验证cookie(其中一个是它的名称).您不能User.Identity.Name在同一个呼叫中使用的原因SignInManager.PasswordSignInAsync是User.Identity填写了来自身份验证cookie的声明(尚未解析).它在第二遍中起作用的原因是cookie在那里并且User.Identity被正确填充.成功登录后的大部分时间都会重定向到某个页面.在此重定向操作中,您将能够使用,User.Identity因为已经设置了cookie.
我发现您可以直接返回 UserManager 并查找它们:
var user = await UserManager.FindAsync(username, password);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2020 次 |
| 最近记录: |