这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

72 lines
2.9 KiB

import 'package:core/models/oauth.dart';
import 'package:core/services/auth.service.dart';
import 'package:core/services/rest.service.dart';
import 'package:core/services/session.service.dart';
import 'package:core/tokens/http.token.dart';
import 'package:core/utils/string.extensions.dart';
import 'package:dio/dio.dart';
class OAuthApiInterceptor extends Interceptor {
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
if (!options.extra.containsKey(HttpTokens.ignoreToken)) {
var token = SessionService.to.token;
if (token != null && token.accessToken.isNullOrWhiteSpace() == false) {
var accessToken = token.accessToken;
var scheme = token.tokenType ?? 'Bearer';
options.headers['Authorization'] = '$scheme $accessToken';
}
}
return handler.next(options);
}
@override
void onError(DioException err, ErrorInterceptorHandler handler) {
// 需要处理401错误
if (err.response?.statusCode == 401) {
var token = SessionService.to.token;
if (token == null || token.refreshToken.isNullOrWhiteSpace() == true)
{
return handler.next(err);
}
var authService = AuthService.to;
authService.refreshToken(RefreshTokenParams(token.refreshToken!))
.then((value) {
SessionService.to.refreshToken(value);
//err.requestOptions
RestService.to.request(
err.requestOptions.path,
data: err.requestOptions.data,
queryParameters: err.requestOptions.queryParameters,
cancelToken: err.requestOptions.cancelToken,
onSendProgress: err.requestOptions.onSendProgress,
onReceiveProgress: err.requestOptions.onReceiveProgress,
options: Options(
method: err.requestOptions.method,
sendTimeout: err.requestOptions.sendTimeout,
receiveTimeout: err.requestOptions.receiveTimeout,
extra: err.requestOptions.extra,
headers: err.requestOptions.headers,
responseType: err.requestOptions.responseType,
contentType: err.requestOptions.contentType,
validateStatus: err.requestOptions.validateStatus,
receiveDataWhenStatusError: err.requestOptions.receiveDataWhenStatusError,
followRedirects: err.requestOptions.followRedirects,
maxRedirects: err.requestOptions.maxRedirects,
persistentConnection: err.requestOptions.persistentConnection,
requestEncoder: err.requestOptions.requestEncoder,
responseDecoder: err.requestOptions.responseDecoder,
listFormat: err.requestOptions.listFormat,
)
).then((value) {
return handler.resolve(value);
}).catchError((_) {
handler.next(err);
});
});
} else {
return handler.next(err);
}
}
}