1

私はasp.netコア1.1とアイデンティティ1.1を使用しています。私のアプリケーションには、「管理者」と「ユーザー」を含む 2 つの役割があります。「管理者」ユーザーはログイン後に「/AdminProfile/Index」に移動し、「ユーザー」ユーザーはログイン後に「/UserProfile/Index」に移動します。

私のログインコード:

    [HttpGet]
    public IActionResult Login(string returnUrl = null)
    {
        ViewData["ReturnUrl"] = returnUrl;
        return View();
    }


    [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, "Error");
                return View(model);
            }
        }
        return View(model);
    }

そして RedirectToLocal アクションで:

    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 を返します。ID 1.1 でユーザーの役割を確認するにはどうすればよいですか?

4

1 に答える 1

1

多くの調査の結果、解決できます。それを試してみてください :

    [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)
            {
                var user = await _userManager.FindByNameAsync(model.UserName);
                string existingRole = _userManager.GetRolesAsync(user).Result.Single();

                return RedirectToLocal(returnUrl,existingRole);
            }
            else
            {
                ModelState.AddModelError(string.Empty, "Error");
                return View(model);
            }
        }
        return View(model);
    }





    private IActionResult RedirectToLocal(string returnUrl,string roleName)
    {
        if (Url.IsLocalUrl(returnUrl))
        {
            return Redirect(returnUrl);
        }
        else
        {
            if (roleName == "Admin")
            {
                return Redirect("/Admin/User");
            }
            else
            {
                return Redirect("/User/UserProfile");
            }

        }
    }
于 2018-01-17T00:24:02.070 に答える