我正在尝试向服务器发送http请求,服务器会通过cookie自动检测用户是否登录。通过将 withCredentials 添加到 true,它可以在 React 中与 Axios HTTP 客户端一起使用,也可以在 Postman 中使用。但它在 Flutter 和 Dio 中返回 401 'Unauthorized',而相同的 URL 在 React 中适用于上述 Axios 代码。后端开发人员说要在标头中传递“Access-Control-Allow-Credentials”:true“,但它返回相同的结果。我附上了 React 和 Flutter 代码。请帮忙。 在反应中:
import axios from 'axios';
import { BASE_URL } from '../lib/api-endpoints';
const request = axios.create({
baseURL: BASE_URL,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
withCredentials: true,
});
export default request;
在 Flutter 中,当我使用以下代码发送请求时,它返回 401“未经授权”,而相同的 URL 与 React 中的 Axios 的上述代码一起使用。
var response = await Dio().post(
BASE_URL,
options: Options(
headers: {
'Content-type': 'application/json',
'Accept': 'application/json',
},
),
);
对于 flutter,您可以在
Dio
中添加 withCredentials,如下所示,但它仅适用于浏览器:
import 'package:dhaka_eats/api/urls.dart';
import 'package:dio/adapter_browser.dart';
import 'package:dio/dio.dart';
class Api {
static Dio dio() {
BaseOptions options = BaseOptions(
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 5),
baseUrl: BASE_URL,
headers: {
'Accept': 'application/json',
'Content-type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
},
);
var dio = Dio(options);
var adapter = BrowserHttpClientAdapter();
adapter.withCredentials = true;
dio.httpClientAdapter = adapter;
return dio;
}
}
现在您可以进行 HTTP 请求了:
await Api.dio().post('/signin', data: payload);