Flutter flatter-dio-http头不';t从拦截器连接
我有一个附加了拦截器的Dio客户端,但是当我尝试添加一些头时,它们不会出现在日志中。 他的密码是我的Flutter flatter-dio-http头不';t从拦截器连接,flutter,dart,interceptor,dio,Flutter,Dart,Interceptor,Dio,我有一个附加了拦截器的Dio客户端,但是当我尝试添加一些头时,它们不会出现在日志中。 他的密码是我的 Dio dio(KeyStore keyStore) { final Dio dio = Dio(BaseOptions( contentType: 'application/json', connectTimeout: 5000, sendTimeout: 5000, )); final Dio tokenDio = Dio();
Dio dio(KeyStore keyStore) {
final Dio dio = Dio(BaseOptions(
contentType: 'application/json',
connectTimeout: 5000,
sendTimeout: 5000,
));
final Dio tokenDio = Dio();
tokenDio.interceptors.add(LogInterceptor(responseBody: true));
dio.interceptors.add(LogInterceptor(responseBody: true));
dio.interceptors.add(InterceptorsWrapper(onRequest: (options, handler) async {
final accessToken = await keyStore.readAccessToken();
final branchId = keyStore.readBranchId();
dio.lock();
options.headers[HttpHeaders.authorizationHeader] = 'Bearer: $accessToken';
options.headers['x-tenant'] = branchId;
handler.next(options);
dio.unlock();
}));
return dio;
}
请求头
I/flutter ( 8872): *** Request ***
I/flutter ( 8872): uri: https://api.someapi.com/users/058c026a-2dce-47e7-9fe1-61dec507265f
I/flutter ( 8872): method: GET
I/flutter ( 8872): responseType: ResponseType.json
I/flutter ( 8872): followRedirects: true
I/flutter ( 8872): connectTimeout: 5000
I/flutter ( 8872): sendTimeout: 5000
I/flutter ( 8872): receiveTimeout: 0
I/flutter ( 8872): receiveDataWhenStatusError: true
I/flutter ( 8872): extra: {}
I/flutter ( 8872): headers:
I/flutter ( 8872):
您不一定需要使用拦截器。 您可以像这样更新默认选项:
dio.options.headers = {
HttpHeaders.authorizationHeader: 'Bearer: $accessToken',
'x-tenant': branchId
}
随后的请求将默认使用这些值。Dio拦截器按顺序运行。由于您的身份验证拦截器是在日志拦截器之后添加的,因此在身份验证拦截器有机会添加头之前,首先调用
LogInterceptor
。侦听器代码在我看来很好,因此我怀疑授权头是否正确地发送到了远程服务器
要使日志反映auth拦截器添加的标题,请确保LogInterceptor
是列表的最后一个元素dio.interceptors