Angular 6 AWS Cognito如何处理newPasswordRequired

时间:2018-10-30 05:05:52

标签: angular6 amazon-cognito

我在这里完全茫然。我一直在努力几个小时,现在尝试多种不同的方法,但是没有任何方法可以使我无所适从。我的问题是,我似乎无法弄清楚在对Cognito进行身份验证请求后,如何在newPasswordRequired回调中从用户检索新密码。这是我当前状态下的代码。请不要犹豫告诉我我可以做些什么,因为我对Angular相当陌生,而对使用Cognito身份验证则是全新的。

public login(email: string, password: string): Observable<UserModel> {
        const cognitoUser = new CognitoUser(this.getUserData(email));
        cognitoUser.setAuthenticationFlowType('USER_PASSWORD_AUTH');
        const authenticationDetails = new AuthenticationDetails(CognitoUtils.getAuthDetails(email, password));
        const self = this;
        return Observable.create((obs: Observer<UserModel>) => {
            cognitoUser.authenticateUser(authenticationDetails, {
                onSuccess: result => {
                    this.session = result;
                    const token = result.getIdToken();
                    const accessToken = result.getAccessToken();
                    this.localStorage.setToken(token);
                    this.localStorage.setAccessToken(accessToken);
                    obs.complete();
                },
                onFailure: err => {
                    obs.error(err);
                },
                newPasswordRequired: (userAttributes, requiredAttributes) => {
                    let dialogRef: MatDialogRef<NewPasswordComponent>;
                    const config = new MatDialogConfig();;
                    config.role = 'dialog';
                    config.width = '40%';
                    config.data = { newPass: self.newPass };
                    dialogRef = self.dialog.open(NewPasswordComponent, config);

                    dialogRef.afterClosed().subscribe(result => {
                        self.newPass = result;
                        cognitoUser.completeNewPasswordChallenge(self.newPass, userAttributes, {
                            onSuccess: result => {
                                obs.complete();
                            },
                            onFailure: err => {
                                obs.error(err);
                            }
                        });
                    });
                }
            });
        });
    }

1 个答案:

答案 0 :(得分:1)

根据您提供的内容,问题似乎出在当您使用completeNewPasswordChallenge进行响应时,您正在传递从newPasswordRequired回调返回的userAttributes,将无法使用。

相反,您需要查看需要哪些属性(即requiredAttributes)并将它们作为对象传递。例如,如果“名称” 是必需属性,则可以通过以下方式传递:

dialogRef.afterClosed().subscribe(result => {
          self.newPass = result;
          cognitoUser.completeNewPasswordChallenge(self.newPass, {"name":"John Doe"}, {
            onSuccess: result => {
              obs.complete();
            },
            onFailure: err => {
              obs.error(err);
            }
          });

希望这会有所帮助!