Flutter 与 Django 身份验证的 Flutter Web 迁移
Flutter to Flutter Web Migration with Django Authentication
我正在将我的 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;
}
有人可以帮助完成此迁移步骤
看起来 CORS 正在阻止它,请尝试在您的 URL 前添加一个 CORS 代理。
在你的 URL 前面添加这个
https://cors-anywhere.herokuapp.com/
一旦您确认它正在工作,最好的做法是拥有自己的代理,因此请使用此方法创建一个:
我正在将我的 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;
}
有人可以帮助完成此迁移步骤
看起来 CORS 正在阻止它,请尝试在您的 URL 前添加一个 CORS 代理。
在你的 URL 前面添加这个 https://cors-anywhere.herokuapp.com/
一旦您确认它正在工作,最好的做法是拥有自己的代理,因此请使用此方法创建一个: