-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAuthController.cs
More file actions
80 lines (68 loc) · 3.23 KB
/
Copy pathAuthController.cs
File metadata and controls
80 lines (68 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using ProjectManagementSystem.Models;
namespace ProjectManagementSystem.Controllers
{
[Route("api/auth")]
[ApiController]
public class AuthController : ControllerBase
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly SignInManager<ApplicationUser> _signInManager;
private readonly IConfiguration _configuration;
public AuthController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager, IConfiguration configuration)
{
_userManager = userManager;
_signInManager = signInManager;
_configuration = configuration;
}
[HttpPost("register")]
public async Task<IActionResult> Register([FromBody] Register model)
{
var user = new ApplicationUser { FirstName = model.FirstName, LastName = model.LastName, UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
return BadRequest(new { message = "Error", errors = result.Errors });
return Ok(new { success = true } );
}
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] Login model)
{
var user = await _userManager.FindByEmailAsync(model.Email);
if (user == null)
return Unauthorized(new { message = "Invalid User Details" });
var res = await _signInManager.CheckPasswordSignInAsync(user, model.Password, false);
if (!res.Succeeded)
{
return Unauthorized(new { message = "Invalid User Details" });
}
var token = GenerateJwtToken(user);
return Ok(new { token = token, userId = user.Id, userName = $"{user.FirstName} {user.LastName}" });
}
private string GenerateJwtToken(ApplicationUser user)
{
var secret = _configuration.GetValue<string>("JwtAuth:Key");
if (secret == null)
throw new ApplicationException("Secret not found");
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
//claim is used to add identity to JWT token
var claims = new[] {
new Claim(JwtRegisteredClaimNames.Sub, user.Id),
new Claim(JwtRegisteredClaimNames.Email, user.Email),
new Claim("Date", DateTime.Now.ToString("yyyy-MM-dd")),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var token = new JwtSecurityToken(_configuration.GetValue<string>("JwtAuth:Issuer"),
_configuration.GetValue<string>("JwtAuth:Issuer"),
claims,
expires: DateTime.Now.AddMinutes(120),
signingCredentials: credentials);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}
}