Перенос представлений ASP.NET Core Identity с Razor на React

Делю проект на фронт и бэк. Фронт пишу на React. Так как использовал готовую Identity, все вьюхи создались на бэке, соответственно все полностью тут. Можно ли как-то перенести нормально фронтовую часть на фронт (т.е. представления переписать на реакте), чтобы не пострадал никакой функционал? Я сейчас пробую просто смотреть, где вызываются и какие методы в готовых представлениях, а потом переписываю на реакт и пишу методы на бэке, которые делают примерно то же самое, только немного иначе, например:

Оригинальный метод выглядит так:

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: false);
            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();
    }

Я переписал так:

[HttpPost("attemptlogin")]
    public async Task<IActionResult> LoginAsync([FromBody]LoginModel input)
    {
        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(input.Email, input.Password, false, lockoutOnFailure: false);
            if (result.Succeeded)
            {
                _logger.LogInformation("User logged in.");
                return Ok();
            }                
        }
        return BadRequest();
    }

Ну я некоторый функционал вырезал и убрал то, что относится к Razor. И на реакте просто форма, которая через fetch вызывает этот метод.

Я только не понимаю, как нормально переделать проверку того, что пользователь залогинился, и когда он переходит между страницами, чтобы у него был статус авторизованного пользователя, сверху показывался его юзернейм, кнопка выхода и т.д. Стоит ли вообще так заморачиваться или есть какие-то другие варианты?


Ответы (0 шт):