【问题标题】:ASP.NET Identity, how to change the view after successful authorizationASP.NET Identity,授权成功后如何更改视图
【发布时间】:2020-02-20 21:37:47
【问题描述】:

我想在授权成功后更改视图(而不是默认索引)。我的场景是用户(非授权人员)进入主页(索引视图),上面有登录按钮(用 ASP.NET 标识概括)。如果用户以管理员身份登录,他应该重定向到另一个页面(视图,而不是索引),上面有另一个上下文。我使用简单的 asp.net 身份功能(帐户/登录),但我是身份的初学者,无法获得正确的方法来进行我需要的更改。我该怎么做?我应该更改什么通用方法来为管理员进行重定向?只有我发现的是 Ares.Identity.Pages.Account -> Login.cs

        [AllowAnonymous]
public class LoginModel : PageModel
{
    private readonly SignInManager<IdentityUser> _signInManager;
    private readonly ILogger<LoginModel> _logger;

    public LoginModel(SignInManager<IdentityUser> signInManager, ILogger<LoginModel> logger)
    {
        _signInManager = signInManager;
        _logger = logger;
    }

    [BindProperty]
    public InputModel Input { get; set; }

    public IList<AuthenticationScheme> ExternalLogins { get; set; }

    public string ReturnUrl { get; set; }

    [TempData]
    public string ErrorMessage { get; set; }

    public class InputModel
    {
        [Required]
        [EmailAddress]
        public string Email { get; set; }

        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Display(Name = "Remember me?")]
        public bool RememberMe { get; set; }
    }

    public async Task OnGetAsync(string returnUrl = null)
    {
        if (!string.IsNullOrEmpty(ErrorMessage))
        {
            ModelState.AddModelError(string.Empty, ErrorMessage);
        }

        returnUrl = returnUrl ?? Url.Content("~/");

        // Clear the existing external cookie to ensure a clean login process
        await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);

        ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();

        ReturnUrl = returnUrl;
    }

    public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        returnUrl = returnUrl ?? Url.Content("~/");

        if (ModelState.IsValid)
        {
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
            if (result.Succeeded)
            {
                _logger.LogInformation("User logged in.");
                return LocalRedirect(returnUrl);
            }
            if (result.RequiresTwoFactor)
            {
                return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
            }
            if (result.IsLockedOut)
            {
                _logger.LogWarning("User account locked out.");
                return RedirectToPage("./Lockout");
            }
            else
            {
                ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                return Page();
            }
        }

        // If we got this far, something failed, redisplay form
        return Page();
    }
}

【问题讨论】:

    标签: asp.net asp.net-mvc authentication asp.net-identity


    【解决方案1】:

    这一行决定了您成功登录后将用户发送到哪里

    returnUrl = returnUrl ?? Url.Content("~/");
    

    因此,如果他们尝试访问您网站中的安全页面,它会将他们发送到他们尝试访问的页面。否则会将它们发送到“~/”,这是您的应用程序的根目录。

    将“~/”替换为您要发送的路线。

    【讨论】:

    • 路线必须是怎样的?好的,f.e.重定向后我的下一个视图将是“管理员视图”。在这种情况下,我应该在“”之间写什么?
    • 您的管理视图的网址是什么?
    • 我找到了我需要的东西:returnUrl = returnUrl ?? Url.Content("~/Home/AdminView/");非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    相关资源
    最近更新 更多