Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

LoginCommand.cs 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using BlackRock.Reporting.API.Authentication;
  2. using BlackRock.Reporting.API.Core.Models;
  3. using BlackRock.Reporting.API.Mediator.AuthenticationMediator.Models;
  4. using BlackRock.Reporting.API.Mediator.UserMediator.Model;
  5. using MediatR;
  6. using Microsoft.AspNetCore.Identity;
  7. namespace BlackRock.Reporting.API.Mediator.AuthenticationMediator.Commands
  8. {
  9. public class LoginCommand : IRequest<Result<CredentialsCommand>>
  10. {
  11. public string Username { get; set; }
  12. public string Password { get; set; }
  13. }
  14. public class LoginCommandHandlers : IRequestHandler<LoginCommand, Result<CredentialsCommand>>
  15. {
  16. private readonly ILogger<LoginCommand> logger;
  17. private readonly IJwtManager jwtManager;
  18. private readonly IRefreshTokenManager refreshTokenManager;
  19. private readonly UserManager<ApplicationUser> userManager;
  20. public LoginCommandHandlers(ILogger<LoginCommand> logger, IJwtManager jwtManager, IRefreshTokenManager refreshTokenManager, UserManager<ApplicationUser> userManager)
  21. {
  22. this.logger = logger;
  23. this.jwtManager = jwtManager;
  24. this.refreshTokenManager = refreshTokenManager;
  25. this.userManager = userManager;
  26. }
  27. public async Task<Result<CredentialsCommand>> Handle(LoginCommand command, CancellationToken cancellationToken)
  28. {
  29. if (command is null)
  30. throw new ArgumentException($"Parameter {nameof(command)} must not be null");
  31. try
  32. {
  33. var user = await userManager.FindByNameAsync(command.Username);
  34. if (user != null && await userManager.CheckPasswordAsync(user, command.Password))
  35. {
  36. var token = jwtManager.GenerateToken(command.Username);
  37. await refreshTokenManager.RemoveRefreshToken(user);
  38. var refreshToken = await refreshTokenManager.GenerateRefreshToken(user);
  39. return new Result<CredentialsCommand>
  40. {
  41. Data = new CredentialsCommand
  42. {
  43. RefreshToken = refreshToken,
  44. JwtToken = token
  45. }
  46. };
  47. }
  48. return new Result<CredentialsCommand>
  49. {
  50. IsSuccess = false,
  51. Error = "Invalid username and password"
  52. };
  53. }
  54. catch (Exception ex)
  55. {
  56. logger.LogError(ex, "Faild login");
  57. return new Result<CredentialsCommand> { IsSuccess = false, Error = "Faild login." };
  58. }
  59. }
  60. }
  61. }