Cognito 错误 I/flutter(4963):无效参数:需要 PASSWORD 参数

Posted

技术标签:

【中文标题】Cognito 错误 I/flutter(4963):无效参数:需要 PASSWORD 参数【英文标题】:Cognito Error I/flutter ( 4963): Invalid argument(s): PASSWORD parameter is required 【发布时间】:2020-01-03 05:52:52 【问题描述】:

我正在尝试按照 Flutter pub.dev 文档进行 Cognito 和 AWS 用户身份验证。我正在构建一个 Flutter 移动应用程序,并且能够成功地将用户注册到我的 AWS 用户池中。我正在尝试对登录功能进行编码,但是它不会注册我尝试提供的任何参数。即密码和用户名(电子邮件)

我尝试过重启电脑 android Studios,尝试遵循所有 AWS 文档,并在 https://pub.dev/packages/amazon_cognito_identity_dart 上重新编写代码

AttributeArg ar1 = AttributeArg(name: 'USERNAME', value: userEmail); AttributeArg ar2 = AttributeArg(name: 'PASSWORD', value: userPassword);

final List<AttributeArg> authParams = [
  ar1,
  ar2,
];

AuthenticationDetails authDetails2 = AuthenticationDetails();

authDetails2.authParameters = authParams;

//final authDetails = new AuthenticationDetails(
//authParameters: authDetails2.getAuthParameters());

final authDetails =
    new AuthenticationDetails(authParameters: authDetails2.authParameters);

setCognitoUser();
CognitoUserSession session;

cognitoUser.setAuthenticationFlowType('USER_PASSWORD_AUTH');

try 
  //session = await cognitoUser.initiateAuth(authDetails);
  session = await cognitoUser.authenticateUser(authDetails);
  // username: userEmail, password: userPassword));
 catch (e) 
  print(e);

print(session.getAccessToken().getJwtToken());

I/flutter (4963):无效参数:需要 PASSWORD 参数 E/flutter(4963):[错误:flutter/lib/ui/ui_dart_state.cc(148)]未处理的异常:NoSuchMethodError:方法'getAccessToken'被调用为null。 E/颤动​​(4963):接收器:空 E/flutter(4963):尝试调用:getAccessToken() E/flutter (4963):#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5) E/flutter(4963):#1 Globals.logInUser(包:neurominer_app/globals.dart:76:19) E/颤动​​(4963): E/颤振(4963):#2 _LoginScreenState.build。 (包:neurominer_app/screens/login_screen.dart:155:34) E/flutter (4963):#3 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:635:14) E/颤振(4963):#4 _InkResponseState.build。 (包:flutter/src/material/ink_well.dart:711:32) E/flutter(4963):#5 GestureRecognizer.invokeCallback(包:flutter/src/gestures/recognizer.dart:182:24) E/flutter(4963):#6 TapGestureRecognizer._checkUp(包:flutter/src/gestures/tap.dart:365:11) E/flutter (4963): #7 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:275:7) E/flutter (4963):#8 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:455:9) E/flutter (4963): #9 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:75:13) E/flutter (4963): #10 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:102:11) E/flutter (4963): #11 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19) E/flutter(4963):#12 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent(包:flutter/src/gestures/binding.dart:198:22) E/flutter (4963): #13 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7) E/flutter(4963):#14 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue(包:flutter/src/gestures/binding.dart:102:7) E/flutter (4963): #15 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7) E/flutter (4963):#16 _rootRunUnary (dart:async/zone.dart:1136:13) E/flutter (4963):#17 _CustomZone.runUnary (dart:async/zone.dart:1029:19) E/flutter (4963): #18 _CustomZone.runUnaryGuarded (dart:async/zone.dart:931:7) E/flutter (4963):#19 _invoke1 (dart:ui/hooks.dart:250:10) E/flutter (4963): #20 _dispatchPointerDataPacket (dart:ui/hooks.dart:159:5) E/颤动​​(4963):

【问题讨论】:

查看文档,您的 authDetails 变量需要是这样的: final authDetails = new AuthenticationDetails( username: 'email@inspire.my', password: 'Password001');所以我假设顶部数组中的“ar2”可能为空或无效。 我更改了一些代码并重新运行了所有内容。我相信问题出在一个单独的屏幕(我的登录屏幕)上,我没有发送非空值。因此它出现了用户名/密码为空。 【参考方案1】:

来自https://pub.dev/packages/amazon_cognito_identity_dart的正确代码

只需要确保由于我在多个屏幕(导入类和调用方法以进行用户身份验证)之间拆分我的代码,因此有效的用户名和密码(非空)值被用于身份验证。

final userPool = new CognitoUserPool(
    'ap-southeast-1_xxxxxxxxx', 'xxxxxxxxxxxxxxxxxxxxxxxxxx');
final cognitoUser = new CognitoUser(
    'email@inspire.my', userPool);
final authDetails = new AuthenticationDetails(
    username: 'email@inspire.my', password: 'Password001');
CognitoUserSession session;
try 
  session = await cognitoUser.authenticateUser(authDetails);
 catch(e)
  print(e);

【讨论】:

以上是关于Cognito 错误 I/flutter(4963):无效参数:需要 PASSWORD 参数的主要内容,如果未能解决你的问题,请参考以下文章

AWS Cognito:在 Auth.signIn 中出现错误(验证 amazon-cognito-identity-js 是不是已链接)

由于错误 AccessDeniedException(Lambda 别名作为 Cognito 触发器),AWS Cognito 用户池引发 PreSignUp 调用失败

I/flutter:FormatException:输入意外结束(在字符 1)

AWS Cognito 错误:“identityPoolId”未能满足约束

Angular + amazon-cognito-identity-js,为啥我收到错误:未定义全局

AWS ALB使用cognito认证时遇到redirect_mismatch错误