/
ilyamikhaylov07
/
integration_solution_course
Обзор
Документация
Войти
/
ilyamikhaylov07
/
integration_solution_course
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
TaskAPI/Services/AuthService.cs
70 строк
2 KB
Ilya
add 4 laba
02 ноя 2025, 19:16
02 ноя 2025, 19:16
fdd8d01
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using TaskAPI.Database; using TaskAPI.DTOs.AuthDTOs; namespace TaskAPI.Services { public class AuthService { private readonly TaskDbContext _taskDbContext; private readonly TokenManager _tokenManager; public AuthService(TaskDbContext taskDbContext, TokenManager tokenManager) { _taskDbContext = taskDbContext; _tokenManager = tokenManager; } public async Task<TokenDTO?> GetTokensAsync([FromBody] LoginDTO dto) { var user = await _taskDbContext.Users .FirstOrDefaultAsync(u => u.Email == dto.Email); if (user == null) { return null; } if (!HasherPassword.VerifyPassword(dto.Password, user.PasswordHash)) { return null; } List<Claim> claims = new List<Claim> { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Email, dto.Email) }; var refresh = _tokenManager.GenerateRefreshToken(claims); var access = _tokenManager.GenerateAccessToken(claims); return new TokenDTO { AccessToken = access, RefreshToken = refresh }; } public Guid? ValidateToken(string token) { try { var handler = new JwtSecurityTokenHandler(); var jwt = handler.ReadJwtToken(token); var userIdStr = jwt.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value; if (Guid.TryParse(userIdStr, out var userId)) return userId; return null; } catch { return null; } } } }