根据用户配置文件重定向身份验证

时间:2018-03-15 00:41:16

标签: c# razor asp.net-identity

我正在尝试使用Razor页面(我之前的经验是使用网页表单),并且在用户登录后设置重定向时遇到了困难。

我想要做的是查看有关用户的一些数据,然后根据信息重定向到特定页面。

在VS提供的默认模板中,这些代码行处理登录:

var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
    _logger.LogInformation("User logged in.");
    return LocalRedirect(Url.GetLocalUrl(returnUrl));
}

我尝试使用UserManager实例获取有关已登录用户的信息,但它不起作用(它只返回null)。

var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
    _logger.LogInformation("User logged in.");
    var name = _userManager.GetUserName(HttpContext.User); //Returns null
    return LocalRedirect(Url.GetLocalUrl(returnUrl));
}

我猜这是因为在加载重定向页面之前没有设置身份验证cookie? (如果我在result.Succeeded之后立即查询SignInManager,它会告诉我用户没有登录)。

任何关于让它做我想做的最好技术的指针都会非常感激。并不完全相信Razor页面文档可以随时使用!

1 个答案:

答案 0 :(得分:1)

在重新加载页面之前,没有设置cookie是正确的。

但是你很接近 - 你已经知道了用户名 - 它在Input.Email。尽管变量名称令人困惑,但_signInManager.PasswordSignInAsync需要用户名,密码和bool(MSDN)。

因此,要获取完整的用户对象,您需要在用户管理器上使用FindByNameAsync method

var userObject = await _userManager.FindByNameAsync(Input.Email);

然后做任何你需要做的事情来决定重定向的位置。