【问题标题】:Flutter to Flutter Web Migration with Django Authentication使用 Django 身份验证的 Flutter 到 Flutter Web 迁移
【发布时间】:2020-10-05 04:25:00
【问题描述】:

我正在将我的 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;
}

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

【问题讨论】:

  • 尝试使用.catchError 捕获任何错误。您从请求中收到什么响应?

标签: flutter flutter-web


【解决方案1】:

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

在您的网址前添加此内容 https://cors-anywhere.herokuapp.com/

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

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

【讨论】:

  • 如何在生产中处理这个问题?
  • 我让它在生产环境中使用我自己的服务器使用 cors-anyway 进行代理,如上所述
猜你喜欢
  • 2020-11-27
  • 2021-11-10
  • 2020-11-27
  • 2021-01-17
  • 1970-01-01
  • 2019-11-22
  • 2019-01-05
  • 2021-07-08
  • 2017-03-18
相关资源
最近更新 更多