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



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

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

在 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?(如果我在结果后立即查询登录管理器。成功,它告诉我用户未登录(。

任何关于让它做我想让它做的事情的最佳技术的指示将不胜感激。不完全相信 Razor 页面文档是从头开始的!

您说的是正确的,在重新加载页面之前不会设置 cookie。

但是您很接近 - 您已经知道用户名 - 它在Input.Email.尽管变量的名称令人困惑,但_signInManager.PasswordSignInAsync采用用户名,密码和布尔值(MSDN(。

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

var userObject = await _userManager.FindByNameAsync(Input.Email);
然后执行您需要

执行的任何操作来决定重定向到何处。

最新更新