Атрибут авторизации игнорируется, даже если вы вошли в систему

#asp.net #.net #asp.net-mvc #asp.net-core

#asp.net #.net #asp.net-mvc #asp.net-core

Вопрос:

Кажется, что действие, украшенное [Authorize] атрибутом, игнорируется, даже если я вошел в систему. вероятно, это не игнорируется, скорее всего, я, вероятно, неправильно маршрутизировал.

Итак, в моем Home контроллере у меня есть Privacy страница по умолчанию, и я оформил действие HomeController примерно так

 [Authorize]
public IActionResult Privacy()
{
    return View();
}
 

И если я не вошел в систему, он перенаправит меня /signin , когда я попытаюсь получить доступ /privacy
Затем я продолжаю входить в систему и пытаюсь получить доступ к этой странице после успешного входа в систему, но она просто перенаправляет меня /signin снова

Вот как ConfigureServices выглядит мой.. Я что-то забыл?

 //Add identity
services.AddIdentity<IdentityUser, IdentityRole>(config =>
{
    config.Password.RequiredLength = 4;
    config.Password.RequireDigit = false;
    config.Password.RequireUppercase = false;
    config.Password.RequireNonAlphanumeric = false;
})
.AddEntityFrameworkStores<AccountDbContext>()
.AddDefaultTokenProviders();


services.ConfigureApplicationCookie(config =>
{
    config.Cookie.Name = "Identity.Cookie";
    config.LoginPath = "/signin";
}
 

Это Signin

 [Route("signin")]
[HttpPost]
public async Task<IActionResult> Signin(SigninUserModel userModel)
{
    var user = new IdentityUser
    {
        UserName = userModel.Username,
        PasswordHash = userModel.Password
    };

    if (userManager.FindByNameAsync(userModel.Username).Result != null)
    {
        var result = await signinManager.PasswordSignInAsync(userModel.Username,
                                            userModel.Password,
                                            isPersistent: false,
                                            lockoutOnFailure: false);

        if (result.Succeeded)
        {
            return RedirectToAction("index", "home");
            //Return the user to the dashboard.
        }
        else
        {
            ModelState.AddModelError("Password", "Uh oh! It seems as if that's not the correct password.");
            return View();
        }
    }
    else
    {
        ModelState.AddModelError("Username", "Uh oh! Couldn't find an account with that username.");
        return View();
    }

    
    return View();
}
 

Комментарии:

1. Не могли бы вы Configure также поделиться методом в Startup.cs.

Ответ №1:

Я предполагаю, что порядок ваших промежуточных программ будет неправильным по Configure методу. Они должны вызываться в следующем порядке:

 app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
});
 

Дополнительная информация