В моем приложении ASP.CORE я использую аутентификацию по идентификатору пользователя.
Я хочу сделать следующее: когда пользователь посещает сайт, если он не авторизован на сайте - показать ему домашнюю страницу, но если он был авторизован ранее- показать ему другую страницу (страница шифрования контроллера в моем примере). НО ЕСЛИ он перейдет с домашней страницы на / Encrypt, программа должна перенаправить его на страницу входа (как это работает сейчас).
Здесь, при запуске в Configure, я попытался перенаправить на другую страницу /Зашифровать (по умолчанию), когда пользователь посещает сайт, если пользователь был авторизован ранее - все работает (он перенаправляет на страницу / Зашифровать), НО, если он не был авторизован ранее, программа перенаправит его на страницу входа на контроллере аккаунта. Вот в чем проблема.
Я отмечаю, что Account Controller не запускается, если пользователь был авторизован ранее (только если ранее не авторизовался (без файлов cookie аутентификации)), поэтому яневозможно перенаправить с помощью Account Contoller. Итак, где находится запрос на перехват (или читается об этом) или где выполняется проверка файлов cookie для авторизации?Или что с этим делать?
Моя настройка запуска:
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<ApplicationContext>();
...
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Encrypt}/{action=Index}");
});
}
Мой контроллер учетной записи выглядит так:
public class AccountController : Controller
{
private readonly UserManager<User> _userManager;
private readonly SignInManager<User> _signInManager;
public AccountController(UserManager<User> userManager, SignInManager<User> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
[HttpGet]
public IActionResult Login(string returnUrl = null)
{
ViewData["UserName"] = this.GetUserName();
return View(new LoginViewModel { ReturnUrl = returnUrl });
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var result =
await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, false);
if (result.Succeeded)
{
if (!string.IsNullOrEmpty(model.ReturnUrl) && Url.IsLocalUrl(model.ReturnUrl))
{
return Redirect(model.ReturnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
return View(model);
}
Мой контроллер шифрования выглядит следующим образом:
[Authorize]
public class EncryptController : Controller
{ ... }