我有一个带有 AWS Lambda 的 C# 后端。我的后端有一个功能,可以使用 AWS cognito 对用户进行身份验证,并通过响应正文发回 IDToken 响应:
return Ok(idToken);
我用flutter和curl调用完全相同的http请求,但响应不同。
这是flutter中的请求:
final requestBody =
jsonEncode({"Username": "Myusername", "Password": "Mysecretpassword"});
final request = await http.post(
Uri.parse(
"https://myAWSLink/signin"),
headers: {'Content-Type': 'application/json'},
body: requestBody);
这是curl中的请求:
curl -X POST "https://myAWSLink/signin" \
-H "Content-Type: application/json" \
-d '{
"Username": "myusername",
"Password": "Mysecretpassword"
}'
如您所见,它们都有相同的链接、标头和正文,但响应不同。 curl 命令的响应有 1063 个字符长度,但我的 flutter 应用程序的响应只有 1023 个字符长度。因此,当我尝试发送 IDToken 来验证我的 API 时,它不能与 Flutter 响应配合使用,但可以与 curl 响应配合使用。
Flutter 在收到 IDtoken 时似乎跳过了某些字符。为什么会发生这种情况?如何让 flutter 响应与 Curl 的响应相匹配?
事实证明,该请求实际上接收了整个 1063 个字符数的 IDToken,但问题是我试图使用
debugPrint(IDToken)
打印整个 IDToken,而 flutter 允许您在一条语句中打印的最大字符限制是 1023。超过 1023 个字符,它会截断 1023 个限制之后的任何内容。这就是我修复它的方法:
// print the first 200 characters of the token:
debugPrint(request.body.substring(0, 200));
// print the remaining characters
debugPrint(request.body.substring(200));