Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

UserService.cs 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. namespace Diligent.WebAPI.Business.Services
  2. {
  3. public class UserService : IUserService
  4. {
  5. private readonly AuthorizationSettings _authSettings;
  6. private readonly UserManager<User> _userManager;
  7. private readonly IMapper _mapper;
  8. public UserService(IOptions<AuthorizationSettings> authSettings, UserManager<User> userManager, IMapper mapper)
  9. {
  10. _authSettings = authSettings.Value;
  11. _userManager = userManager;
  12. _mapper = mapper;
  13. }
  14. public async Task<IEnumerable<User?>> GetAll() =>
  15. await _userManager.Users.ToListAsync();
  16. public async Task<User?> GetById(int id) =>
  17. await _userManager.FindByIdAsync(id.ToString());
  18. public async Task CreateUser(CreateUserRequestDto model)
  19. {
  20. var user = _mapper.Map<User>(model);
  21. await _userManager.CreateAsync(user, model.Password);
  22. }
  23. public async Task<AuthenticateResponseDto?> Authenticate(AuthenticateRequestDto model)
  24. {
  25. var user = await _userManager.Users.Where(x => x.UserName == model.Username).FirstOrDefaultAsync();
  26. // return null if user not found
  27. if (user == null)
  28. return null;
  29. // authentication successful so generate jwt token
  30. var token = GenerateJwtToken(user);
  31. return new AuthenticateResponseDto
  32. {
  33. Id = user.Id,
  34. Username = user.UserName,
  35. FirstName = user.FirstName,
  36. LastName = user.LastName,
  37. Token = token
  38. };
  39. }
  40. private string GenerateJwtToken(User user)
  41. {
  42. // generate token that is valid for 7 days
  43. var tokenHandler = new JwtSecurityTokenHandler();
  44. var key = Encoding.ASCII.GetBytes(_authSettings.Secret);
  45. var tokenDescriptor = new SecurityTokenDescriptor
  46. {
  47. Subject = new ClaimsIdentity(new[] { new Claim("id", user.Id.ToString()) }),
  48. Expires = DateTime.UtcNow.AddMinutes(2),
  49. SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
  50. };
  51. var token = tokenHandler.CreateToken(tokenDescriptor);
  52. return tokenHandler.WriteToken(token);
  53. }
  54. }
  55. }