mirror of
https://github.com/RedWizardsLab/EchoHub.git
synced 2026-09-06 15:46:03 +02:00
feat: implement session persistence with "Remember Me" functionality and logout support
This commit is contained in:
@@ -18,6 +18,8 @@ public sealed class ApiClient : IDisposable
|
||||
public string? RefreshToken => _refreshToken;
|
||||
public string BaseUrl { get; }
|
||||
|
||||
public event Action? OnTokensRefreshed;
|
||||
|
||||
public ApiClient(string baseUrl)
|
||||
{
|
||||
BaseUrl = baseUrl.TrimEnd('/');
|
||||
@@ -68,6 +70,19 @@ public sealed class ApiClient : IDisposable
|
||||
SetTokens(result);
|
||||
}
|
||||
|
||||
public async Task<LoginResponse> LoginWithRefreshTokenAsync(string refreshToken)
|
||||
{
|
||||
var request = new RefreshRequest(refreshToken);
|
||||
var response = await _http.PostAsJsonAsync("/api/auth/refresh", request);
|
||||
await EnsureSuccessAsync(response);
|
||||
|
||||
var result = await response.Content.ReadFromJsonAsync<LoginResponse>()
|
||||
?? throw new InvalidOperationException("Token refresh returned empty response.");
|
||||
|
||||
SetTokens(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task LogoutAsync()
|
||||
{
|
||||
if (!string.IsNullOrEmpty(_refreshToken))
|
||||
@@ -313,6 +328,7 @@ public sealed class ApiClient : IDisposable
|
||||
_refreshToken = result.RefreshToken;
|
||||
_expiresAt = result.ExpiresAt;
|
||||
_http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _accessToken);
|
||||
OnTokensRefreshed?.Invoke();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user