#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(); вместе с приложением. Использовать авторизацию(); не использовать. Мне следовало использовать и то, и другое.