Flutter Dio/http 中的等效代码与 React 中的 Axios 'withCredentials' 相比用于处理基于 Cookie 的身份验证请求的等效代码是什么?

问题描述 投票:0回答:1

我正在尝试向服务器发送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 cookies axios httprequest dio
1个回答
4
投票

对于 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);
© www.soinside.com 2019 - 2024. All rights reserved.