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

LogoutCommand.cs 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 LogoutCommand : CredentialsCommand, IRequest<Result<bool>>
  10. {
  11. }
  12. public class LogoutCommandHandlers : IRequestHandler<LogoutCommand, Result<bool>>
  13. {
  14. private readonly ILogger<LogoutCommand> logger;
  15. private readonly IJwtManager jwtManager;
  16. private readonly IRefreshTokenManager refreshTokenManager;
  17. private readonly UserManager<ApplicationUser> userManager;
  18. public LogoutCommandHandlers(ILogger<LogoutCommand> logger, IJwtManager jwtManager, IRefreshTokenManager refreshTokenManager, UserManager<ApplicationUser> userManager)
  19. {
  20. this.logger = logger;
  21. this.jwtManager = jwtManager;
  22. this.refreshTokenManager = refreshTokenManager;
  23. this.userManager = userManager;
  24. }
  25. public async Task<Result<bool>> Handle(LogoutCommand command, CancellationToken cancellationToken)
  26. {
  27. if (command is null)
  28. throw new ArgumentException($"Parameter {nameof(command)} must not be null");
  29. try
  30. {
  31. // this checks is jwt token correct
  32. var userName = jwtManager.GetUserName(command.JwtToken);
  33. var user = await userManager.FindByNameAsync(userName);
  34. if (!(await refreshTokenManager.ValidateRefreshToken(user, command.RefreshToken)))
  35. return new Result<bool>
  36. {
  37. IsSuccess = false,
  38. Error = "Invalid token"
  39. };
  40. await refreshTokenManager.RemoveRefreshToken(user);
  41. return new Result<bool>
  42. {
  43. Data = true
  44. };
  45. }
  46. catch (Exception ex)
  47. {
  48. logger.LogError(ex, "Faild to add data to DB.");
  49. return new Result<bool> { IsSuccess = false, Error = "Faild to add data to DB." };
  50. }
  51. }
  52. }
  53. }