Я создал API с использованием .NET 7. Этот API использует токены JWT и имеет контроллер, который отвечает за регистрацию и вход пользователей. В Swagger это работает отлично.
Это мой API AuthController:
с использованием Microsoft.AspNetCore.Authentication; использование Microsoft.AspNetCore.Http; использование Microsoft.AspNetCore.Identity; использование Microsoft.AspNetCore.Mvc; использование WildlifeLogAPI.Models.DTO; использование WildlifeLogAPI.Репозитории; пространство имен WildlifeLogAPI.Controllers { [Маршрут("api/[контроллер]")] [Апиконтроллер] общедоступный класс AuthController: ControllerBase { частный UserManager только для чтения; частный только для чтения ITokenRepository tokenRepository; public AuthController (UserManager userManager, ITokenRepository tokenRepository) { this.userManager = userManager; this.tokenRepository = tokenRepository; } //POST: API/Аутентификация/Регистрация [HttpPost] [Маршрут("Регистрация")] public async Task Register([FromBody] RegisterRequestDto RegisterRequestDto) { // создаем новый экземпляр IdentityUser (который включает в себя имя пользователя и адрес электронной почты, которые они отправляют) varidentityUser = новый IdentityUser { Имя пользователя = RegisterRequestDto.Имя пользователя, Электронная почта = RegisterRequestDto.Email }; // затем используем встроенный CreateAsync userManager (передаем только что созданного нами идентификатора и пароль, переданный в dto) варidentResult = ждут userManager.CreateAsync(identityUser, RegisterRequestDto.Password); // Добавляем роли пользователю // проверяем, успешно ли создан пользователь если (identityResult.Успешно) { // Добавляем роль пользователя по умолчанию при регистрации вар roleIdentityResult = ждут userManager.AddToRoleAsync(identityUser, «Пользователь»); // проверяем, успешно ли добавлена роль пользователя, если да, то выводим сообщение если (roleIdentityResult.Succeeded) { return Ok("Пользователь зарегистрирован. Пожалуйста, войдите."); } } // если это не удалось return BadRequest("что-то пошло не так. Повторите попытку. "); } //POST: API/аутентификация/логин [HttpPost] [Маршрут("Войти")] общедоступная асинхронная задача Login ([FromBody] LoginRequestDto loginRequestDto) { // получаем пользователя по электронной почте и сохраняем его в переменной пользователя вар пользователь = ждут userManager.FindByEmailAsync(loginRequestDto.Email); // проверяем, связано ли письмо с пользователем // если он заполнен и мы находим его в базе данных, то выполняем код, необходимый для входа в систему если (пользователь != ноль) { // проверяем, что пароль соответствует адресу электронной почты, используя встроенный CheckPasswordAsync // передаем адрес электронной почты и пароль вар checkPasswordResult = ждут userManager.CheckPasswordAsync(пользователь, loginRequestDto.Password); // если пароль соответствует адресу электронной почты, то создаем токен если (checkPasswordResult) { // Здесь создаем токен // Получаем роли для этого пользователя вар роли = ждут userManager.GetRolesAsync(пользователь); // если есть роли, создаем токен если (роли!= ноль) { // создаем токен JWT var jwtToken = tokenRepository.CreateJWTToken(пользователь, роли.ToList()); // это наш токен // помещаем этот токен в dto вар ответ = новый LoginResponseDto { jwtToken = jwtToken }; вернуть ОК (ответ); } } } return BadRequest("Имя пользователя или пароль неверны"); } } } Затем я создал приложение ASP.NET Core MVC с контроллером под названием AuthsController, который использует этот API и обрабатывает токен JWT.
с использованием Microsoft.AspNetCore.Authentication; использование Microsoft.AspNetCore.Identity; использование Microsoft.AspNetCore.Mvc; использование System.Net.Http.Headers; использование System.Security.Claims; использование System.Text; используя System.Text.Json; использование WildlifeLog.UI.Models.DTO; использование WildlifeLog.UI.Models.ViewModels; использование WildlifeLogAPI.Models.DTO; пространство имен WildlifeLog.UI.Controllers { публичный класс AuthsController: Контроллер { частный только для чтения IHttpClientFactory httpClientFactory; частный только для чтения IHttpContextAccessor httpContextAccessor; частный SignInManager только для чтения; частный регистратор ILogger WildlifeLog.UI
- Home
- Парки Ваши журналы
- Пользователи
- Конфиденциальность
Пользователь не вошел в систему
Зарегистрироваться Войти } @RenderBody() &копировать; 2023 - WildlifeLog.UI - Конфиденциальность @await RenderSectionAsync("Скрипты", обязательно: false)
Итак, User.Identity.IsAuthenticated возвращает false, хотя я вошел в систему и могу получить доступ к контроллерам, доступ к которым могут получить только вошедшие в систему пользователи. Что я делаю не так?
р>