Я добавил ASP.NET Идентификатор основного веб-API, но он не авторизуется, даже если успешно входит в систему

#asp.net-core-mvc #asp.net-identity #asp.net-core-webapi #identity

Вопрос:

Я собираюсь опубликовать веб-API, работающий на ASP.NET Ядро. Однако мне нужна панель администратора в том же проекте.

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

Контроллер с процессами входа в систему

 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using zfc.data.Abstract; using zfc.webapi.Identity; using zfc.webapi.Models;  namespace zfc.webapi.Controllers {  [Route("[controller]")]  [AutoValidateAntiforgeryToken]  public class adminController : Controller  {  private IuserRepository _userRepository;  private UserManagerlt;Usergt; _userManager;  private SignInManagerlt;Usergt; _signInManager;   public adminController(IuserRepository userRepository, UserManagerlt;Usergt; userManager, SignInManagerlt;Usergt; signInManager)  {  _signInManager = signInManager;  _userManager = userManager;  _userRepository = userRepository;  }   [HttpGet]  public IActionResult Index()  {  return View();  }   [HttpGet]  [Route("api")]  public IActionResult adminLoginzfc()  {  return View();  }   [Route("api")]  [HttpPost]  public async Tasklt;IActionResultgt; adminLoginzfc(LoginModel model)  {  if (!ModelState.IsValid)  {  return View(model);  }   var user = await _userManager.FindByEmailAsync(model.Email);   if (user == null)  {  ModelState.AddModelError("", "Bu mail adresi ile daha önce hesap oluşturulmamış");  return View(model);  }   if (!await _userManager.IsEmailConfirmedAsync(user))  {  ModelState.AddModelError("", "Lütfen email hesabınıza gelen link ile üyeliğinizi onaylayınız.");  return View(model);  }   var result = await _signInManager.PasswordSignInAsync(user, model.Password, true, false);   if (result.Succeeded)  {  System.Console.WriteLine("Giriş başarılı");  return RedirectToAction("Index", "zfc");  }   ModelState.AddModelError("", "Girilen kullanıcı adı veya parola yanlış");  return View(model);  }  } }  

Страница, доступ к которой можно получить с помощью авторизации

 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging;  namespace zfc.webapi.Controllers {  [Authorize]  [Route("[controller]")]  public class zfc : Controller  {  public IActionResult Index()  {  return View();  }  } }  

Форма для входа в систему

 @model LoginModel  lt;h1 class="h3"gt;Loginlt;/h1gt; lt;hrgt;  lt;div class="row"gt;  lt;div class="col-md-8"gt;  lt;form asp-controller="admin" asp-action="api" method="POST"gt;  lt;div asp-validation-summary="All" class="text-danger"gt;lt;/divgt;   lt;div class="form-group row"gt;  lt;label asp-for="Email" class="col-sm-2 col-form-label"gt;lt;/labelgt;  lt;div class="col-sm-10"gt;  lt;input class="form-control" asp-for="Email"gt;  lt;span asp-validation-for="Email" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;   lt;div class="form-group row"gt;  lt;label asp-for="Password" class="col-sm-2 col-form-label"gt;lt;/labelgt;  lt;div class="col-sm-10"gt;  lt;input class="form-control" asp-for="Password"gt;  lt;span asp-validation-for="Password" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;      lt;div class="form-group row"gt;  lt;div class="col-sm-10 offset-sm-2"gt;  lt;button type="submit" class="btn btn-primary"gt;Loginlt;/buttongt;  lt;a href="/account/forgotpassword" class="btn btn-link"gt;Şifremi Unuttumlt;/agt;  lt;/divgt;  lt;/divgt;  lt;/formgt;  lt;/divgt; lt;/divgt;  

Startup.cs

 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.HttpsPolicy; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using zfc.data.Abstract; using zfc.data.Concrete; using zfc.webapi.Identity;  namespace zfc.webapi {  public class Startup  {  public Startup(IConfiguration configuration)  {  Configuration = configuration;  }   public IConfiguration Configuration { get; }   // This method gets called by the runtime. Use this method to add services to the container.  public void ConfigureServices(IServiceCollection services)  {   services.AddDbContextlt;ApplicationContextgt;(options =gt; options.UseSqlite("Data Source=shopDb"));  services.AddIdentitylt;User, IdentityRolegt;().AddEntityFrameworkStoreslt;ApplicationContextgt;().AddDefaultTokenProviders();   services.Configurelt;IdentityOptionsgt;(options =gt;  {  // password  options.Password.RequireDigit = true;  options.Password.RequireLowercase = true;  options.Password.RequireUppercase = true;  options.Password.RequiredLength = 6;  options.Password.RequireNonAlphanumeric = true;   // Lockout   options.Lockout.MaxFailedAccessAttempts = 5;  options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(35);  options.Lockout.AllowedForNewUsers = true;   // options.User.AllowedUserNameCharacters = "";  options.User.RequireUniqueEmail = true;  options.SignIn.RequireConfirmedEmail = false;  options.SignIn.RequireConfirmedPhoneNumber = false;  });   services.ConfigureApplicationCookie(options =gt;  {  options.LoginPath = "/admin";  options.LogoutPath = "/admin/logout";  options.AccessDeniedPath = "/admin";  options.SlidingExpiration = false;  options.ExpireTimeSpan = TimeSpan.FromDays(1);  options.Cookie = new CookieBuilder  {  HttpOnly = true,  Name = ".Zfc42.Security.Cookie"  };  });   services.AddScopedlt;IuserRepository, EfUserRepositorygt;();   services.AddControllers();  services.AddControllersWithViews();  }   // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.  public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IConfiguration configuration, UserManagerlt;Usergt; userManager)  {  if (env.IsDevelopment())  {  app.UseDeveloperExceptionPage();  }   app.UseHttpsRedirection();  app.UseStaticFiles();  app.UseRouting();  app.UseAuthorization();   app.UseEndpoints(endpoints =gt;  {  endpoints.MapControllers();  });   seedIdentity.Seed(userManager, configuration).Wait();  }  } }  

Project structure:

введите описание изображения здесь

Этот звонок

 return RedirectToAction("Index", "zfc");   

работает, но снова перенаправляется на страницу входа в систему. Он также добавляет файл cookie в браузер.

введите описание изображения здесь

Мне действительно нужна помощь. Хотя файл cookie добавлен, он не авторизуется. Он снова перенаправляется на страницу входа в систему. Не могли бы вы, пожалуйста, помочь?

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

1. Проблема решена. Приложение «Моя ошибка». UseAuthentication(); вместе с приложением. Использовать авторизацию(); не использовать. Мне следовало использовать и то, и другое.