Cook ie Аутентификация не перенаправляется после входа пользователя в систему asp. net core 3 - PullRequest
0 голосов
/ 03 мая 2020

Я не могу полностью обдумать эту проблему. Когда пользователь переходит на URL-адрес администратора, он перенаправляется на указанную администратором c учетную запись / страницу входа (находится в папке области администратора). Но когда администратор входит в контроллер администратора, украшенный атрибутом [Authorize (Roles = "Admin", AuthenticationSchemes = "Backend")], страница просто перезагружается с помощью returnUrl. Кажется, что приложение не распознает вошедшего в систему пользователя для предоставления доступа к действиям контроллера администратора, не может понять, почему. Пожалуйста, помогите!

Контроллер администратора

[Authorize(Roles = "Admin", AuthenticationSchemes = "Backend")]
[Area("Admin")] 
public class AdminController : Controller
{
  private readonly IAdminRepository _adminInterface;
  private readonly UserManager<AppUser> _userManager;
  private readonly RoleManager<IdentityRole> _roleManager;

  public AdminController(IAdminRepository adminInterface, UserManager<AppUser> userManager, 
    RoleManager<IdentityRole> roleManager)
 {
    _adminInterface = adminInterface;
    _userManager = userManager;
    _roleManager = roleManager;
 }

 public IActionResult Index()
 {
    return View();
 }

}

Контроллер учетной записи

[Area("Admin")]
public class AccountController : Controller
{
private readonly SignInManager<AppUser> _signInManager;
private readonly UserManager<AppUser> _userManager;
private readonly RoleManager<IdentityRole> _roleManager;

public AccountController(SignInManager<AppUser> signInManager, 
    UserManager<AppUser> userManager, RoleManager<IdentityRole> roleManager)
{
    _signInManager = signInManager;
    _userManager = userManager;
    _roleManager = roleManager;
}

[HttpGet]
public IActionResult Login()
{
    return View();
}

[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model, string ReturnUrl)
{
    if(ModelState.IsValid)
    {
        var user = await _userManager.FindByNameAsync(model.Username);
        if(user != null && !(await _userManager.IsInRoleAsync(user, "Admin")))
        {
            ModelState.AddModelError(string.Empty, "Invalid login attempt");
            return View(model);
        }
        if(user != null && !user.EmailConfirmed && (await _userManager.CheckPasswordAsync(user, model.Password)))
        {
            ModelState.AddModelError(string.Empty, "Confirm Email Address");
            return View(model);
        }

        var result = await _signInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberMe, true);
        if(result.Succeeded)
        {
            if(!string.IsNullOrEmpty(ReturnUrl) && Url.IsLocalUrl(ReturnUrl))
            {
                return Redirect(ReturnUrl);
            }
            else
            {
                return RedirectToAction("index", "admin");
            } 
        }
        ModelState.AddModelError(string.Empty, "Invalid login attempt");
    }
    return View(model);
}
}

Startup.cs

public void ConfigureServices(IServiceCollection services)
 {
    services.AddControllersWithViews(); 


    services.AddIdentity<AppUser, IdentityRole>(options =>
    {
        options.Password.RequiredUniqueChars = 3;
        options.Password.RequiredLength = 8;
        options.User.RequireUniqueEmail = true;
    }) 
    .AddEntityFrameworkStores<ApplicationDbContext>();

    services.AddScoped<IAdminRepository, AdminRepository>();
    services.AddAuthentication()
    .AddCookie("Backend", options =>
    {
        options.Cookie.Name = "Backend";
        options.LoginPath = new PathString("/admin/account/login/");
        options.LogoutPath = new PathString("/admin/account/logout/"); 
    })
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
    {
        options.LoginPath = new PathString("/account/login/");
    }); 

 }



public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 {
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseStaticFiles();
    app.UseHttpsRedirection();
    app.UseRouting();


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

    app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
            name: "AllAreas",
            pattern: "{area:exists}/{controller=admin}/{action=index}/{id?}");

            endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=home}/{action=index}/{id?}");
       }); 
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...