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