Javascript 检查用户是否已登录-aws amplify、cognito、angular
我试图使用aws amplify在angular应用程序中实现登录功能 当我点击“使用谷歌登录”按钮时,它会将我带到谷歌登录页面,并在我提供有效的谷歌凭证时将我带回到主页 在我的authService中,我正在收听Javascript 检查用户是否已登录-aws amplify、cognito、angular,javascript,angular,amazon-web-services,amazon-cognito,aws-amplify,Javascript,Angular,Amazon Web Services,Amazon Cognito,Aws Amplify,我试图使用aws amplify在angular应用程序中实现登录功能 当我点击“使用谷歌登录”按钮时,它会将我带到谷歌登录页面,并在我提供有效的谷歌凭证时将我带回到主页 在我的authService中,我正在收听'auth'事件。因此,当用户登录时,主题“isLoggedInSub”会发出一个“true”值。我试图显示“isLoggedIn$”的可观察值,该值由该主题构成。但它总是显示错误。正如您在我的html页面中看到的,我使用异步管道来显示值。为什么不显示值true 当我调试上面概述的这个
'auth'
事件。因此,当用户登录时,主题“isLoggedInSub”会发出一个“true”值。我试图显示“isLoggedIn$”的可观察值,该值由该主题构成。但它总是显示错误。正如您在我的html页面中看到的,我使用异步管道来显示值。为什么不显示值true
当我调试上面概述的这个特定流时,我确实看到它命中了主题发出true的代码。iethis.isLoggedInSub.next(true)代码>
logincomponent.html
<button (click) ="signInWithGoogle()" type="button" class="btn btn-outline-primary">Login with Google</button>
<span>is loggedin: {{this.authService.isLoggedIn$ | async}}</span>
auth.service.ts
async signInWithGoogle() {
await this.authService.socialSignIn(AuthService.GOOGLE);
}
private isLoggedInSub = new BehaviorSubject<boolean>(false);
isLoggedIn$ = this.isLoggedInSub.asObservable();
constructor() {
Hub.listen('auth', (data) => {
switch (data.payload.event) {
case 'signIn':
this.isLoggedInSub.next(true);
break;
case 'signOut':
this.isLoggedInSub.next(false);
break;
case 'signIn_failure':
break;
default:
break;
}
});
}
socialSignIn(socialProvider: CognitoHostedUIIdentityProvider): Promise<ICredentials> {
return Auth.federatedSignIn({
provider: socialProvider,
});
}
private isLoggedInSub=新行为主体(false);
isLoggedIn$=this.isLoggedInSub.asObservable();
构造函数(){
Hub.listen('auth',(数据)=>{
开关(data.payload.event){
案例“签名”:
this.isLoggedInSub.next(true);
打破
“注销”案例:
this.isLoggedInSub.next(false);
打破
“签名失败”案例:
打破
违约:
打破
}
});
}
socialSignIn(socialProvider:CognitoHostedUIIdentityProvider):承诺{
返回Auth.federatedSignIn({
提供者:socialProvider,
});
}