Added Main
This commit is contained in:
96
noteApi/Controllers/AccountController.cs
Normal file
96
noteApi/Controllers/AccountController.cs
Normal file
@@ -0,0 +1,96 @@
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using noteApi.Dtos.Account;
|
||||
using noteApi.Interfaces;
|
||||
using noteApi.Models;
|
||||
|
||||
namespace noteApi.Controllers
|
||||
{
|
||||
[Route("api/account")]
|
||||
[ApiController]
|
||||
public class AccountController : ControllerBase
|
||||
{
|
||||
private readonly UserManager<AppUser> _userManager;
|
||||
private readonly ITokenService _tokenService;
|
||||
private readonly SignInManager<AppUser> _signInManager;
|
||||
public AccountController(UserManager<AppUser> userManager, ITokenService tokenService, SignInManager<AppUser> signInManager)
|
||||
{
|
||||
_userManager = userManager;
|
||||
_tokenService = tokenService;
|
||||
_signInManager = signInManager;
|
||||
}
|
||||
|
||||
[HttpPost("register")]
|
||||
public async Task<IActionResult> Register([FromBody] RegisterDto registerDto)
|
||||
{
|
||||
try
|
||||
{
|
||||
if(!ModelState.IsValid)
|
||||
return BadRequest(ModelState);
|
||||
|
||||
var appUser = new AppUser
|
||||
{
|
||||
UserName = registerDto.Username,
|
||||
Email = registerDto.Email
|
||||
};
|
||||
|
||||
var createUser = await _userManager.CreateAsync(appUser, registerDto.Password);
|
||||
|
||||
if (createUser.Succeeded)
|
||||
{
|
||||
var roleResult = await _userManager.AddToRoleAsync(appUser, "User");
|
||||
if (roleResult.Succeeded)
|
||||
{
|
||||
return Ok(new NewUserDto{
|
||||
UserName = appUser.UserName,
|
||||
Email = appUser.Email,
|
||||
Token = _tokenService.CreateToken(appUser)
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
return StatusCode(500, roleResult.Errors);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return StatusCode(500, createUser.Errors);
|
||||
}
|
||||
} catch (Exception ex)
|
||||
{
|
||||
return StatusCode(500, ex);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost("login")]
|
||||
public async Task<IActionResult> Login(LoginDto loginDto)
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
{
|
||||
return BadRequest(ModelState);
|
||||
}
|
||||
|
||||
var user = await _userManager.Users.FirstOrDefaultAsync(x => x.UserName == loginDto.Username.ToLower());
|
||||
|
||||
if(user == null)
|
||||
{
|
||||
return Unauthorized("Invalid username!");
|
||||
}
|
||||
|
||||
var result = await _signInManager.CheckPasswordSignInAsync(user, loginDto.Password, false);
|
||||
|
||||
if (!result.Succeeded) return Unauthorized("Username not found and/or Password incorrect!");
|
||||
|
||||
return Ok(
|
||||
new NewUserDto
|
||||
{
|
||||
UserName = user.UserName,
|
||||
Email = user.Email,
|
||||
Token = _tokenService.CreateToken(user)
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user