使用MVC 5的身份,登录后无法立即获取用户名

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.

有什么问题的帮助吗?

Ale*_*rt. 8

在其执行链SignInManager.PasswordSignInAsync方法的最后,调用SignInAsync方法,该方法基本上负责设置包含关于用户的多个声明的身份验证cookie(其中一个是它的名称).您不能User.Identity.Name在同一个呼叫中使用的原因SignInManager.PasswordSignInAsyncUser.Identity填写了来自身份验证cookie的声明(尚未解析).它在第二遍中起作用的原因是cookie在那里并且User.Identity被正确填充.成功登录后的大部分时间都会重定向到某个页面.在此重定向操作中,您将能够使用,User.Identity因为已经设置了cookie.


Den*_*elu 7

我发现您可以直接返回 UserManager 并查找它们:

var user = await UserManager.FindAsync(username, password);
Run Code Online (Sandbox Code Playgroud)