This commit is contained in:
2025-12-04 12:12:46 +08:00
parent 5bdb04da15
commit ba1f54b21c
2 changed files with 10 additions and 68 deletions

View File

@@ -1,4 +1,5 @@
using Atomx.Admin.Client.Services;
using Atomx.Common.Constants;
using Atomx.Common.Models;
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components;
@@ -24,9 +25,6 @@ namespace Atomx.Admin.Client.Utils
private readonly IHttpClientFactory _httpClientFactory;
private static readonly SemaphoreSlim _refreshLock = new(1, 1);
private const string AccessTokenKey = "accessToken";
private const string RefreshTokenKey = "refreshToken";
public AuthHeaderHandler(
ITokenProvider tokenProvider,
NavigationManager navigationManager,
@@ -71,7 +69,7 @@ namespace Atomx.Admin.Client.Utils
if (refreshed)
{
var newToken = await _localStorage.GetItemAsync<string>(AccessTokenKey);
var newToken = await _localStorage.GetItemAsync<string>(StorageKeys.AccessToken);
if (!string.IsNullOrEmpty(newToken))
{
var clonedRequest = await CloneHttpRequestMessageAsync(request, newToken);
@@ -109,8 +107,8 @@ namespace Atomx.Admin.Client.Utils
await _refreshLock.WaitAsync(cancellationToken);
try
{
var currentAccess = await _localStorage.GetItemAsync<string>(AccessTokenKey);
var currentRefresh = await _localStorage.GetItemAsync<string>(RefreshTokenKey);
var currentAccess = await _localStorage.GetItemAsync<string>(StorageKeys.AccessToken);
var currentRefresh = await _localStorage.GetItemAsync<string>(StorageKeys.RefreshToken);
if (string.IsNullOrEmpty(currentAccess) || string.IsNullOrEmpty(currentRefresh))
{
@@ -139,8 +137,8 @@ namespace Atomx.Admin.Client.Utils
{
_logger.LogWarning("Refresh request failed with status {Status}", resp.StatusCode);
// 如果刷新失败,移除本地 token防止无限重试
await _localStorage.RemoveItemAsync(AccessTokenKey);
await _localStorage.RemoveItemAsync(RefreshTokenKey);
await _localStorage.RemoveItemAsync(StorageKeys.AccessToken);
await _localStorage.RemoveItemAsync(StorageKeys.RefreshToken);
return false;
}
@@ -153,14 +151,14 @@ namespace Atomx.Admin.Client.Utils
if (authResp == null || string.IsNullOrEmpty(authResp.Token) || string.IsNullOrEmpty(authResp.RefreshToken))
{
_logger.LogWarning("Invalid response from refresh endpoint");
await _localStorage.RemoveItemAsync(AccessTokenKey);
await _localStorage.RemoveItemAsync(RefreshTokenKey);
await _localStorage.RemoveItemAsync(StorageKeys.AccessToken);
await _localStorage.RemoveItemAsync(StorageKeys.RefreshToken);
return false;
}
// 保存新的 tokens 到 localStorage
await _localStorage.SetItemAsync(AccessTokenKey, authResp.Token, cancellationToken);
await _localStorage.SetItemAsync(RefreshTokenKey, authResp.RefreshToken, cancellationToken);
await _localStorage.SetItemAsync(StorageKeys.AccessToken, authResp.Token, cancellationToken);
await _localStorage.SetItemAsync(StorageKeys.RefreshToken, authResp.RefreshToken, cancellationToken);
_logger.LogInformation("Token refreshed successfully");
return true;