#flutter #dart #uwsgi #restful-authentication #flask-restful
#флаттер #dart #uwsgi #restful-аутентификация #flask-restful
Вопрос:
Я тестирую написание rest-api в Flask в сочетании с мобильным клиентом flutter. У меня проблема с аутентификацией с помощью Flask-JWT. Я использую ngnix и uwsgi для запуска приложения flask в Ubuntu 20.04. В режиме отладки приложения flask оно работает без проблем.
С Postman это работает всегда. Код Flutter dart:
Future<String> authRequest() async {
try {
final HttpClient client = HttpClient();
client.badCertificateCallback =
((X509Certificate cert, String host, int port) =>
true); // accept all certificat
final Map login = {
"username": "user",
"password": "goodsecret",
};
final request = await client.postUrl(Uri.parse(ProviderBase.url '/auth'));
request.headers.add(HttpHeaders.contentTypeHeader, "application/json");
request.add(utf8.encode(json.encode(login)));
final response = await request.close();
final reply = await response.transform(utf8.decoder).join();
final jresponse = json.decode(reply);
ProviderBase.authtoken = jresponse['access_token'];
print('token: ${ProviderBase.authtoken}');
} catch (error) {
print('Error: ${error.toString()}');
}
}
Я получаю это сообщение об ошибке (ответ) в flutter:
"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>"
Может быть, у кого-то есть идея?
На данный момент я использую самозаверяющий сертификат.
Ответ №1:
Я нашел решение: это недостающая длина содержимого заголовка. С веб-сервером это необходимо.
это работает для меня:
...
final body = utf8.encode(json.encode(login));
request.headers.add(HttpHeaders.contentTypeHeader, "application/json");
request.headers.add(HttpHeaders.contentLengthHeader, body.length.toString());
request.add(body);
...