1

私はCognitoが初めてで、しばらくの間状況に陥っています。

Cognito を使用してユーザーをログインしようとしています。初めて、応答は NEW_PASSWORD_REQUIRED のチャレンジを返します。

import Auth from '@aws-amplify/auth';

...

Auth.signIn(this.username, this.password)
            .then((user: any) => {
                if (user) {
                    if (user.challengeName && user.challengeName == 'NEW_PASSWORD_REQUIRED') {
                        this.sessionService.setUser(user);
                        this.router.navigate([this.confirmAccountUrl]);
                    } else {
                        this.router.navigate([this.dashboardUrl]);
                    }
                }
            })
            .catch((error: any) => {
                switch (error.code) {
                    case 'UserNotConfirmedException':
                        this.router.navigate([this.confirmAccountUrl]);
                        break;
                    case 'NotAuthorizedException':
                        this.message = 'Your temporary password is expired and must be reset by admin';
                        break;
                    case 'UsernameExistsException':
                        this.message = 'Invalid username or password';
                        break;
                }
            });

ユーザーに次のコンポーネントに移動して、そこでパスワードを提供してもらいたいです。

問題は、返される結果がCognitoUser型であることです。これは、 reset-passwordコンポーネントに渡す必要があります。

結果をセッションに保存して、 reset-passwordコンポーネントで取得しようとしました。

    constructor(
    private sessionService: SessionService
) {
    this.user = this.sessionService.getUser();
}

resetPassword() {
    Auth.completeNewPassword(this.user, this.new_password)
        .then((data) => {
            console.log(data);
        })
        .catch((err) => console.error('Error', err));
}

これは私にエラーを与えます:

Error TypeError: user.completeNewPasswordChallenge is not a function

私はグーグルでいくつかの調査を行い、ユーザーは実際にはjsonオブジェクトですが、CognitoUserタイプではないことがわかりました

ユーザーCognitoUserに解析できる関数はなく、それを格納する Amplify の関数もありません。

セッションサービスは次のとおりです。

import { Injectable } from '@angular/core';
import { SessionStorageService } from 'angular-web-storage';

@Injectable({
    providedIn: 'root'
})
export class SessionService {

constructor(
    private sessionStorageService: SessionStorageService
) { }

setUser(user: any) {
    this.sessionStorageService.set('user', user);
}

getUser(): any {
    return this.sessionStorageService.get('user');
}
}

ユーザーがまだ認証されていないため、Auth.authenticatedUserは値を返しません。

ここで何が間違っていますか?

4

1 に答える 1