私は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は値を返しません。
ここで何が間違っていますか?