29 lines
937 B
C#
29 lines
937 B
C#
using MediatR;
|
|
using Microsoft.AspNetCore.Http;
|
|
using SequenceAuth.Lib;
|
|
|
|
namespace SequenceAuth.Example.Features.Auth;
|
|
|
|
public record LogoutCommand() : IRequest;
|
|
|
|
public class LogoutCommandHandler(ISequenceStore sequenceStore, IHttpContextAccessor httpContextAccessor, Microsoft.Extensions.Options.IOptions<SequenceAuthOptions> options) : IRequestHandler<LogoutCommand>
|
|
{
|
|
public async Task Handle(LogoutCommand request, CancellationToken cancellationToken)
|
|
{
|
|
var userIdStr = httpContextAccessor.HttpContext?.Items[options.Value.UserIdItemKey]?.ToString();
|
|
var isUserIdPresent = string.IsNullOrEmpty(userIdStr);
|
|
|
|
_ = isUserIdPresent switch
|
|
{
|
|
false => await ProcessLogout(userIdStr!),
|
|
true => 0
|
|
};
|
|
}
|
|
|
|
private async Task<int> ProcessLogout(string userId)
|
|
{
|
|
await sequenceStore.InvalidateUserSessionsAsync(userId);
|
|
return 1;
|
|
}
|
|
}
|