77 lines
2.6 KiB
C#
77 lines
2.6 KiB
C#
// вход и регистрация
|
||
using DEMO.Data; // база
|
||
using DEMO.Models; // пользователи
|
||
using Microsoft.AspNetCore.Mvc; // контроллер
|
||
using Microsoft.EntityFrameworkCore; // поиск в базе
|
||
|
||
namespace DEMO.Controllers;
|
||
|
||
[ApiController] // это api
|
||
[Route("api/[controller]")] // адрес будет api/auth
|
||
public class AuthController : ControllerBase
|
||
{
|
||
private readonly AppDbContext _context; // база
|
||
|
||
// запоминаю базу
|
||
public AuthController(AppDbContext context)
|
||
{
|
||
_context = context;
|
||
}
|
||
|
||
// войти, адрес POST api/auth/login
|
||
[HttpPost("login")]
|
||
public async Task<IActionResult> Login(User user) // приходят логин и пароль
|
||
{
|
||
// ищу такого человека в базе
|
||
var existingUser = await _context.Users
|
||
.Include(u => u.Role) // сразу беру его роль
|
||
.FirstOrDefaultAsync(u =>
|
||
u.Login == user.Login &&
|
||
u.Password == user.Password);
|
||
|
||
// не нашел значит неправильный пароль
|
||
if (existingUser == null)
|
||
return Unauthorized("Неверный логин или пароль.");
|
||
|
||
// нашел, отдаю его обратно
|
||
return Ok(new
|
||
{
|
||
existingUser.Id,
|
||
existingUser.Login,
|
||
Role = existingUser.Role?.Name
|
||
});
|
||
}
|
||
|
||
// регистрация, адрес POST api/auth/register
|
||
[HttpPost("register")]
|
||
public async Task<IActionResult> Register(User user) // приходят логин и пароль
|
||
{
|
||
// проверяю нет ли уже такого логина
|
||
var exists = await _context.Users
|
||
.AnyAsync(u => u.Login == user.Login);
|
||
|
||
if (exists)
|
||
return BadRequest("Такой логин уже занят.");
|
||
|
||
// ищу роль клиент чтоб дать ее новичку
|
||
var clientRole = await _context.Roles
|
||
.FirstOrDefaultAsync(r => r.Name == "Client");
|
||
|
||
if (clientRole == null)
|
||
return BadRequest("Роль Client не найдена.");
|
||
|
||
user.RoleId = clientRole.Id; // даю роль клиент
|
||
|
||
_context.Users.Add(user); // добавляю в базу
|
||
await _context.SaveChangesAsync(); // сохраняю
|
||
|
||
// отдаю нового человека
|
||
return Ok(new
|
||
{
|
||
user.Id,
|
||
user.Login,
|
||
Role = clientRole.Name
|
||
});
|
||
}
|
||
}
|