Add project files
This commit is contained in:
62
T120B165-ImgBoard/Controllers/AuthController.cs
Normal file
62
T120B165-ImgBoard/Controllers/AuthController.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using T120B165_ImgBoard.Dtos;
|
||||
using T120B165_ImgBoard.Models;
|
||||
using T120B165_ImgBoard.Services;
|
||||
|
||||
namespace T120B165_ImgBoard.Controllers;
|
||||
|
||||
|
||||
[ApiController]
|
||||
[Route("api/auth")]
|
||||
public class AuthController(UserManager<User> userManager, ITokenService tokenService): ControllerBase
|
||||
{
|
||||
|
||||
[HttpPost("register")]
|
||||
public async Task<ActionResult<User>> Register(RegisterDto dto)
|
||||
{
|
||||
var user = new User
|
||||
{
|
||||
UserName = dto.UserName,
|
||||
Email = dto.Email,
|
||||
};
|
||||
|
||||
var result = await userManager.CreateAsync(user, dto.Password);
|
||||
await userManager.AddToRoleAsync(user, UserRoles.Regular);
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
return BadRequest(result.Errors);
|
||||
}
|
||||
return Ok(user);
|
||||
}
|
||||
|
||||
[HttpPost("login")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||
public async Task<ActionResult<TokenDto>> Login(LoginDto dto)
|
||||
{
|
||||
var user = await userManager.FindByEmailAsync(dto.Email);
|
||||
if (user == null || !await userManager.CheckPasswordAsync(user, dto.Password))
|
||||
return Unauthorized();
|
||||
|
||||
var accessToken = await tokenService.GenerateJwtToken(user);
|
||||
var refreshToken = await tokenService.GenerateRefreshToken(user);
|
||||
return Ok(new TokenDto(AccessToken: accessToken, RefreshToken: refreshToken));
|
||||
}
|
||||
|
||||
[HttpPost("refresh")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||
public async Task<ActionResult<TokenDto>> Refresh(RefreshDto dto)
|
||||
{
|
||||
var token = await tokenService.GetRefreshTokenByValue(dto.RefreshToken);
|
||||
if (token == null) return Unauthorized();
|
||||
var user = token.User;
|
||||
|
||||
await tokenService.InvalidateRefreshToken(token);
|
||||
|
||||
var accessToken = await tokenService.GenerateJwtToken(user);
|
||||
var newRefreshToken = await tokenService.GenerateRefreshToken(user);
|
||||
return Ok(new TokenDto(AccessToken: accessToken, RefreshToken: newRefreshToken));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user