FixAuth
This commit is contained in:
@@ -1,19 +1,19 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using System.Net;
|
||||
using System.Net.Http.Headers;
|
||||
using TechHelper.Client.HttpRepository;
|
||||
using System.Net.Http.Headers;
|
||||
using TechHelper.Client.HttpRepository;
|
||||
|
||||
|
||||
namespace BlazorProducts.Client.HttpInterceptor
|
||||
{
|
||||
public class HttpInterceptorHandlerService : DelegatingHandler
|
||||
{
|
||||
private readonly NavigationManager _navManager;
|
||||
private readonly RefreshTokenService2 _refreshTokenService;
|
||||
private readonly NavigationManager _navManager;
|
||||
private readonly IRefreshTokenService _refreshTokenService;
|
||||
|
||||
public HttpInterceptorHandlerService(
|
||||
NavigationManager navManager,
|
||||
RefreshTokenService2 refreshTokenService)
|
||||
IRefreshTokenService refreshTokenService)
|
||||
{
|
||||
_navManager = navManager;
|
||||
_refreshTokenService = refreshTokenService;
|
||||
@@ -25,15 +25,14 @@ namespace BlazorProducts.Client.HttpInterceptor
|
||||
|
||||
if (absolutePath != null && !absolutePath.Contains("token") && !absolutePath.Contains("account"))
|
||||
{
|
||||
var token = await _refreshTokenService.TryRefreshToken();
|
||||
var token = await _refreshTokenService.TryRefreshToken();
|
||||
if (!string.IsNullOrEmpty(token))
|
||||
{
|
||||
|
||||
request.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
var response = await base.SendAsync(request, cancellationToken);
|
||||
|
||||
await HandleResponse(response);
|
||||
@@ -45,17 +44,17 @@ namespace BlazorProducts.Client.HttpInterceptor
|
||||
{
|
||||
if (response is null)
|
||||
{
|
||||
|
||||
|
||||
_navManager.NavigateTo("/error");
|
||||
throw new HttpResponseException("服务器不可用。");
|
||||
throw new HttpResponseException("服务器不可用。");
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
|
||||
|
||||
var errorContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"HTTP 错误: {response.StatusCode}. 详情: {errorContent}");
|
||||
Console.WriteLine($"HTTP 错误: {response.StatusCode}. 详情: {errorContent}");
|
||||
|
||||
switch (response.StatusCode)
|
||||
{
|
||||
@@ -67,8 +66,15 @@ namespace BlazorProducts.Client.HttpInterceptor
|
||||
// 400 Bad Request error. Often, you don't navigate for this; you display validation errors on the UI.
|
||||
break;
|
||||
case HttpStatusCode.Unauthorized:
|
||||
// 401 Unauthorized error. Navigate to an unauthorized page or login page.
|
||||
_navManager.NavigateTo("/unauthorized"); // Or: _navManager.NavigateTo("/authentication/login");
|
||||
var token = await _refreshTokenService.TryRefreshToken();
|
||||
if (!string.IsNullOrEmpty(token))
|
||||
{
|
||||
_navManager.NavigateTo(_navManager.Uri, forceLoad: true);
|
||||
}
|
||||
else
|
||||
{
|
||||
_navManager.NavigateTo("/unauthorized");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// For all other errors, navigate to a general error page.
|
||||
|
Reference in New Issue
Block a user