asp.net - Asp Core身份,登录后如何获取userId?

标签 asp.net asp.net-mvc asp.net-core-mvc asp.net-identity

我有2个名为AdminProfileControllerUserProfileController的 Controller 。我想在登录后直接获取userId和用户角色,因为如果用户使用AdminProfileController,我希望用户转到Admin Role,如果用户使用UserProfileController,则希望用户转到User Role

我的代码

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
    {
        ViewData["ReturnUrl"] = returnUrl;
        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);

            if (result.Succeeded)
            {
                return RedirectToLocal(returnUrl);
            }
            else
            {
                ModelState.AddModelError(string.Empty, "Model Erroe");
                return View(model);
            }
        }
        return View(model);
    }


    private IActionResult RedirectToLocal(string returnUrl)
    {
        if (Url.IsLocalUrl(returnUrl))
        {
            return Redirect(returnUrl);
        }
        else
        {
            if (User.IsInRole("Admin"))
            {
                return Redirect("/AdminProfile/Index");
            }
            else
            {
                return Redirect("/UserProfile/Index");
            }
        }
    }

但是User.IsInRole("Admin")始终是false,我也尝试通过以下代码获取userId:
 string userId = _userManager.GetUserId(HttpContext.User);

但是它也返回null。
登录导航到指定路径后如何直接获取userIdrole

最佳答案

您没有从User.IsInRole获得期望值的原因是因为它从cookie读取角色,并且在使用此方法时尚未设置cookie。

出于同样的原因,您不会从_userManager.GetUserId(HttpContext.User)中得到任何东西。在执行时,尚未设置HttpContext.User

在进行检查时,确定用户是否在角色中,最好的做法是使用UserManager.IsInRoleAsync method。此方法检查数据库中的角色。另外,要获取用户对象,您可以使用UserManager.FindByNameAsync method并在其中传递model.UserName值。您将获得自己的ApplicationObject实例,并将获得您的userId进行角色检查。

关于asp.net - Asp Core身份,登录后如何获取userId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48291147/

相关文章:

C# ASP.NET MVC PayPal 找不到程序集

asp.net - 编辑 OpenXML docx 模板并将其作为 FileResult 返回

c# - 使用 cookie 进行 ASP.NET Core .NET Framework 测试

c# - 如何阅读在 asp.net 核心 web api 中发布的 FormUrlEncodedContent?

asp.net-mvc - 自定义 .NET Core 标记帮助程序不起作用

c# - 一个文件中只允许有一条 'model'语句

javascript - jQuery Cycle - 挤压图像?

asp.net-mvc - 将我的自定义模型绑定(bind)到我的 POST Controller

c# - ASP.NET MVC C# Razor 缩小

c# - 无法打开登录请求的数据库。登录失败。用户 'NT AUTHORITY\SYSTEM'登录失败