DemO/DEMO/Controllers/AuthController.cs

77 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// вход и регистрация
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
});
}
}