Skip to content

Commit 190ddb4

Browse files
committed
Create AccountController.cs
Register, login, userProfile added
1 parent 239eeff commit 190ddb4

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
using AutoMapper;
2+
using Microsoft.AspNetCore.Authorization;
3+
using Microsoft.AspNetCore.Identity;
4+
using Microsoft.AspNetCore.Mvc;
5+
using Microsoft.CodeAnalysis.Options;
6+
using Microsoft.Extensions.Options;
7+
using Microsoft.IdentityModel.Tokens;
8+
using Supermarket.Entites.Models;
9+
using Supermarket.Extensions;
10+
using Supermarket.Identity.Models;
11+
using Supermarket.Resources;
12+
using System;
13+
using System.IdentityModel.Tokens.Jwt;
14+
using System.Linq;
15+
using System.Security.Claims;
16+
using System.Text;
17+
using System.Threading.Tasks;
18+
19+
namespace Supermarket.Controllers
20+
{
21+
[Route("api/[controller]")]
22+
[ApiController]
23+
public class AccountController : ControllerBase
24+
{
25+
private readonly UserManager<ApplicationUser> _userManager;
26+
private readonly SignInManager<ApplicationUser> _signInManager;
27+
private readonly ApplicationSettings _appSettings;
28+
private readonly IMapper _mapper;
29+
30+
public AccountController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager,
31+
IOptions<ApplicationSettings> appSettings, IMapper mapper)
32+
{
33+
_userManager = userManager;
34+
_signInManager = signInManager;
35+
_appSettings = appSettings.Value;
36+
_mapper = mapper;
37+
}
38+
39+
[HttpPost]
40+
[Route("Register")]
41+
public async Task<IActionResult> Register([FromBody]RegisterResource resource)
42+
{
43+
if (!ModelState.IsValid)
44+
return BadRequest(ModelState.GetErrorMessage());
45+
46+
var user = new ApplicationUser()
47+
{
48+
UserName = resource.Email,
49+
Email = resource.Email,
50+
FullName = resource.FullName
51+
};
52+
53+
var result = await _userManager.CreateAsync(user, resource.Password);
54+
55+
return Ok(result);
56+
}
57+
58+
[HttpPost]
59+
[Route("Login")]
60+
public async Task<IActionResult> Login([FromBody]LoginResource resource)
61+
{
62+
if (!ModelState.IsValid)
63+
return BadRequest(ModelState.GetErrorMessage());
64+
65+
var user = await _userManager.FindByNameAsync(resource.Email);
66+
67+
if (user != null && await _userManager.CheckPasswordAsync(user, resource.Password))
68+
{
69+
var tokenDescriptor = new SecurityTokenDescriptor
70+
{
71+
Subject = new ClaimsIdentity(new Claim[]
72+
{
73+
new Claim("UserId", user.Id.ToString())
74+
}),
75+
Expires = DateTime.UtcNow.AddDays(1),
76+
SigningCredentials = new SigningCredentials(
77+
new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_appSettings.JWT_Secret)),
78+
SecurityAlgorithms.HmacSha256Signature)
79+
};
80+
var tokenHandler = new JwtSecurityTokenHandler();
81+
var securityToken = tokenHandler.CreateToken(tokenDescriptor);
82+
var token = tokenHandler.WriteToken(securityToken);
83+
84+
return Ok(new { token });
85+
}
86+
else
87+
{
88+
return BadRequest(new { message = "Username or password is incorrect" });
89+
}
90+
}
91+
92+
[HttpGet]
93+
[Authorize]
94+
[Route("Profile")]
95+
public async Task<IActionResult> GetUserInfo()
96+
{
97+
var userId = User.Claims.First(c => c.Type == "UserId").Value;
98+
var user = await _userManager.FindByIdAsync(userId);
99+
100+
var userProfileResource = _mapper.Map<ApplicationUser, UserProfileResource>(user);
101+
102+
return Ok(userProfileResource);
103+
}
104+
}
105+
}

0 commit comments

Comments
 (0)