获取当前登录用户的名称

时间:2019-05-29 09:41:02

标签: c# asp.net-core identity

我使用身份进行了简单的登录。我使用signInManager.PasswordSignInAsync()登录。

如果登录成功,我想使用userManager获取当前登录的用户数据。

问题是我只能从GetUserAsync获取一个ID,却不知道该怎么做。

var result = await mSignInManager.PasswordSignInAsync(username, password, true, false);

if (result.Succeeded)
{
    //var loggedUser = mUserManager.GetUserName(HttpContext.User);
    var userData = mUserManager.GetUserAsync(HttpContext.User);
    var user = await mUserManager.FindByIdAsync(userData.Id.ToString());
    return Redirect("/createpost");
}

3 个答案:

答案 0 :(得分:0)

对我来说,您似乎正在登录用户并立即尝试访问用户信息。 httpContext没有机会更新,仍然可以反映没有用户登录的时间。尝试将用户信息检索逻辑移至“ createpost”,在下一次HTTP往返执行该操作。

    public async Task<IActionResult> createpost()
    {
        var userData = await mUserManager.GetUserAsync(HttpContext.User);
        Debug.WriteLine(userData.Id);
        Debug.WriteLine(userData.UserName);
        Debug.WriteLine(userData.Email);
        return View();
    }

答案 1 :(得分:0)

您遇到了两个问题。首先,GetUserAsync依赖于HttpContext中设置的主体(尚未发生),因此该方法将失败。在您以这种方式访问​​用户之前,必须有一个干预请求。

您可以做的就是使用FindByIdAsync之类的东西直接将用户拉出来,而您已经尝试这样做。但是,您正在尝试根据尝试通过GetUserAsync检索的用户实例的ID查找用户。由于失败,将没有用户,因此也没有在此查找中使用的ID,也将导致失败。这样做甚至没有意义,就好像您已经有用户要从中获取ID一样,通过该ID查找该用户也毫无意义。

因此,您需要做的是根据您实际拥有的信息来查找用户,该信息根据您的代码为username。因此,请执行以下操作:

var user = await mUserManager.FindByNameAsync(username);

答案 2 :(得分:0)

原因是该用户可用于下一个请求,您不能在当前请求中找到该用户,更不用说用户名了。