diff options
author | HombreLaser <sebastian-440@live.com> | 2022-11-15 21:52:57 -0600 |
---|---|---|
committer | HombreLaser <sebastian-440@live.com> | 2022-11-15 21:52:57 -0600 |
commit | 00acb66e39f7b178d58f3f0ec298aec73d7aced9 (patch) | |
tree | b2340ca37d815a4da9870c3ecd483e8dbcf95a44 /Controllers/UsersController.cs | |
parent | 820c3a882c60127338293c1eee4059b2dfd535df (diff) |
Añadida autenticación
Diffstat (limited to 'Controllers/UsersController.cs')
-rw-r--r-- | Controllers/UsersController.cs | 49 |
1 files changed, 34 insertions, 15 deletions
diff --git a/Controllers/UsersController.cs b/Controllers/UsersController.cs index 52c9105..d5dded5 100644 --- a/Controllers/UsersController.cs +++ b/Controllers/UsersController.cs @@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore; using System.Text; using System.Security.Claims; using IdentityAPI.Models; -using IdentityAPI.DTO; +using IdentityAPI.DTOs; namespace IdentityAPI.Controllers { [Route("api/users")] @@ -24,30 +24,49 @@ namespace IdentityAPI.Controllers { _manager = manager; } - [HttpPost("signup")] - public async Task<IActionResult> PostUser(UserDTO data) { - var user = new IdentityUser { UserName = data.UserName, Email = data.Email }; - var result = await _manager.CreateAsync(user, data.Password); + [HttpPost("signup")] + public async Task<IActionResult> SignUp(UserDTO data) { + var user = new IdentityUser { UserName = data.UserName, Email = data.Email }; + var result = await _manager.CreateAsync(user, data.Password); - if(result.Succeeded) - return Ok(new { Token = GenerateToken(user) }); + if(result.Succeeded) + return Ok(new { Token = GenerateToken(user) }); return StatusCode(422, new { error = "The provided user is invalid" }); } - private string GenerateToken(IdentityUser user) { + [HttpPost("login")] + public async Task<IActionResult> Login(LoginRequest data) { + if(data != null && data.Email != null && data.Password != null) { + var user = await _manager.FindByEmailAsync(data.Email); + + if(user == null) + return StatusCode(404, new { error = "Nonexistent user" }); + + var result = await _manager.CheckPasswordAsync(user, data.Password); + + if(result) + return Ok(new { Token = GenerateToken(user)} ); + + return StatusCode(401, new { error = "Wrong credentials" }); + } + + return StatusCode(400, new { error = "Invalid request body" }); + } + + private string GenerateToken(IdentityUser user) { var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])); - var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); + var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var expiration = DateTime.UtcNow.AddMinutes(30); - var issuer = _configuration["Jwt:Issuer"]; + //var issuer = _configuration["Jwt:Issuer"]; var claims = new List<Claim> { - new Claim("sid", user.Id), - new Claim("username", user.UserName), - new Claim("email", user.Email) - }; + new Claim("sid", user.Id), + new Claim("username", user.UserName), + new Claim("email", user.Email) + }; var descriptor = new JwtSecurityToken(issuer: null, audience: null, claims: claims, expires: expiration, signingCredentials: creds); return new JwtSecurityTokenHandler().WriteToken(descriptor); } } -} +}
\ No newline at end of file |