我目前正在开展一个项目,该项目与许多其他项目一样使用 s3 存储。在这种情况下,存储通过后端链接。
情况是这样的,我可以通过 URL 获取“附件”,比如说example.com/api/attachments/{uuid}
。如果用户被授权(通过 header Authorization
),它应该返回一个302
状态码并重定向到 s3 url。问题是,在重定向后,Authorization
标头仍然存在并且http客户端返回400
响应,这是因为持久Authorization
标头。有什么方法可以Authorization
在重定向后删除标头而不捕获第一个请求并触发一个新请求?
我的 http 客户端代码目前如下所示:
@override
Future get({
String url,
Map<String, dynamic> data,
Map<String, String> parameters,
}) async {
await _refreshClient();
try {
final response = await dio.get(
url,
data: json.encode(data),
queryParameters: parameters,
);
return response.data;
} on DioError catch (e) {
throw ServerException(
statusCode: e.response.statusCode,
message: e.response.statusMessage,
);
}
}
Future<void> _refreshClient() async {
final token = await auth.token;
dio.options.baseUrl = config.baseUrl;
dio.options.headers.addAll({
'Authorization': 'Bearer $token',
'Accept': 'application/json',
});
dio.options.contentType = 'application/json';
}