首页 > 解决方案 > 使用 Django 身份验证的 Flutter 到 Flutter Web 迁移

问题描述

我正在将我的颤振项目迁移到颤振网络并尝试联系我的后端 Django 服务器以验证用户帐户,但不断收到此错误:

Error: XMLHttpRequest error.
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 266:20      get current
packages/http/src/browser_client.dart 84:22                                       <fn>
dart-sdk/lib/async/zone.dart 1450:54                                              runUnary
dart-sdk/lib/async/future_impl.dart 143:18                                        handleValue
dart-sdk/lib/async/future_impl.dart 696:44                                        handleValueCallback
dart-sdk/lib/async/future_impl.dart 725:32                                        _propagateToListeners
dart-sdk/lib/async/future_impl.dart 519:7                                         [_complete]
dart-sdk/lib/async/stream_pipe.dart 61:11                                         _cancelAndValue
dart-sdk/lib/async/stream.dart 1229:7                                             <fn>
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 324:14  _checkAndCall
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 329:39  dcall
dart-sdk/lib/html/dart2js/html_dart2js.dart 37204:58                              <fn>


    at Object.createErrorWithStack (http://localhost:5000/dart_sdk.js:4481:12)
    at Object._rethrow (http://localhost:5000/dart_sdk.js:37397:16)
    at async._AsyncCallbackEntry.new.callback (http://localhost:5000/dart_sdk.js:37391:13)
    at Object._microtaskLoop (http://localhost:5000/dart_sdk.js:37223:13)
    at _startMicrotaskLoop (http://localhost:5000/dart_sdk.js:37229:13)
    at http://localhost:5000/dart_sdk.js:32851:9

这是被调用的api:

//获取通行证

Future userLogin(userdetails) async {
  var url = '$_server/api/token/';

  print(userdetails.values);
  var results;

  await http.post(url, body: json.encode(userdetails), headers: {
    "Content-Type": "application/json"
  }).then((http.Response response) {
    final Map<String, dynamic> responseData = json.decode(response.body);

    Token tkn = Token.fromJSON(responseData);

    _accessTkn = tkn.access;
    var refresh = tkn.refresh;

    if (response.statusCode == 200) {
      addToken(_accessTkn);
      addRefresh(refresh);

      tokenType = 'email';
      results = 'valid';
    } else {
      results = 'invalid';
    }
  });
  return results;
}

有人可以帮助完成此迁移步骤

标签: flutterflutter-web

解决方案


看起来 CORS 阻止了它,请尝试在您的 URL 前添加一个 CORS 代理。

在你的 URL https://cors-anywhere.herokuapp.com/前面添加这个

一旦您确认它正在工作,最好的做法是拥有自己的代理,因此使用以下方法创建一个:

https://github.com/Rob--W/cors-anywhere/#documentation


推荐阅读