Angular 6 AWS Cognito Как работать с новым паролем - PullRequest
0 голосов
/ 30 октября 2018

Я полностью растерялся здесь. Я боролся с этим уже несколько часов, пытаясь использовать несколько разных подходов, и ни один из них никуда меня не привел. Моя проблема в том, что я не могу понять, как новый пароль должен быть получен от пользователя в обратном вызове newPasswordRequired после запроса аутентификации в Cognito. Вот мой код в его текущем состоянии. Пожалуйста, не стесняйтесь, скажите мне, что я могу сделать лучше, так как я довольно плохо знаком с 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 голосов
/ 31 октября 2018

Исходя из того, что вы предоставили, похоже, проблема в том, что когда вы отвечаете completeNewPasswordChallenge, вы передаете userAttributes, который возвращается из обратного вызова newPasswordRequired и не будет работать.

Вместо этого вам нужно увидеть, какие атрибуты являются обязательными (то есть requiredAttributes) и передать их как объект. Например, если «имя» является обязательным атрибутом, то передайте следующим образом:

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...