ASP.NET Identity, как изменить представление после успешной авторизации - PullRequest
0 голосов
/ 24 октября 2019

Я хочу изменить представление после успешной авторизации (вместо индекса по умолчанию). Мой сценарий состоит в том, что пользователь (не авторизованное лицо) переходит на главную страницу (представление «Индекс») с кнопкой «Вход» (обобщенно с удостоверением ASP.NET). В случае, если пользователь входит в систему как администратор, он должен перенаправить на ДРУГУЮ страницу (просмотр, а не Индекс) с другим контекстом на нем. Я использую простые функции идентификации asp.net (Account / Login), но я новичок в Identity и не могу найти правильный способ внести изменения в то, что мне нужно. Как я могу это сделать? Какой обобщенный метод я должен изменить только для перенаправления для администратора? Только что я нашел, это 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();
    }
}

1 Ответ

0 голосов
/ 24 октября 2019

Эта строка определяет, куда вы отправите пользователя при успешном входе в систему.

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

Так что, если они попытаются получить доступ к защищенной странице вашего сайта, она отправит их на страницу, к которой они пытались получить доступ. В противном случае он отправит их в «~ /», который является корнем вашего приложения.

Замените «~ /» на маршрут, который вы хотите отправить.

...