/
Egor1k
/
CompClubAPI
Обзор
Документация
Войти
/
Egor1k
/
CompClubAPI
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Controllers/UserController.cs
126 строк
4 KB
Dima Oshuev
поменял структуру проекта для сборки в docker
27 мар 2025, 16:32
27 мар 2025, 16:32
5c3d032
Код
Авторство
О чём код?
using CompClubAPI.Models; using CompClubAPI; using ComputerClubAPI.DTO; using CompClubAPI.Models; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using Microsoft.AspNetCore.Authorization; namespace ComputerClubAPI.Controller { [Route("api/[controller]")] [ApiController] public class UserController : ControllerBase { private readonly IConfiguration _configuration; private readonly ApplicationDbContext _context; public UserController(IConfiguration configuration, ApplicationDbContext context) { this._configuration = configuration; this._context = context; } private string GenerateJwtToken(Account user) { var claims = new List<Claim> { new Claim(JwtRegisteredClaimNames.Sub, user.Email), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(ClaimTypes.Role, user.Role) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var expiration = DateTime.UtcNow.AddMinutes(120); var token = new JwtSecurityToken( issuer: _configuration["Jwt:Issuer"], audience: _configuration["Jwt:Audience"], claims: claims, expires: expiration, signingCredentials: creds ); return new JwtSecurityTokenHandler().WriteToken(token); } // получние JWT токена [HttpPost("login")] public async Task<IActionResult> Login(AuthUserDTO loginDto) { var user = await _context.Accounts.FirstOrDefaultAsync(a => a.Email == loginDto.Email); if (user == null) { return NotFound(); } string token = GenerateJwtToken(user); if (token == null) { return NotFound(); } return Ok(token); } // Шо то не пашет, исправить надо бы [HttpPost("registration")] public async Task<IActionResult> Registration(Account account) { var existingAccount = await _context.Accounts.FirstOrDefaultAsync(a => a.Email == account.Email); if (existingAccount != null) { return BadRequest("Этот email уже зарегестрирован"); } account.Role = "User"; account.Balance = 0; _context.Accounts.Add(account); await _context.SaveChangesAsync(); return Ok(); } // получение пользователя по мылу что бы из JWT авторизовать пользователя [HttpGet("get-user-by-email/{email}")] public async Task<IActionResult> GetUserByEmail(string email) { var user = await _context.Accounts.FirstOrDefaultAsync(a => a.Email == email); if (user == null) { return NotFound(); } return Ok(user); } [HttpPatch("balance-up/{email}/{amount}")] public async Task<IActionResult> BalanceUp(string email, int amount) { var user = await _context.Accounts.FirstOrDefaultAsync(u => u.Email == email); if (user == null) { return BadRequest("Пользователь не найден"); } user.Balance += amount; _context.Update(user); await _context.SaveChangesAsync(); return Ok(); } } }