【发布时间】:2021-12-17 09:23:20
【问题描述】:
我有以下问题。也许我还没有很好地理解 Angular 是如何工作的。 我已经在我的代码中插入了谷歌身份验证,它可以工作。然后 JWT 被发送到 C# 中的后端,我从后端正确接收 JWT。基于正确的身份验证和授权,然后我想导航到内部页面。但是我并没有立即成功,只有当我按下F5时,因为在OnInit中有一个Redirect功能。
这是代码。我使用 Angular 11。
登录组件
export class LoginComponent implements OnInit, DoCheck {
user: BehaviorSubject<User>;
ngOnInit(): void {
this.myRedirectTo();
}
myRedirectTo(): void {
let returnUrl = "";
if (this.user != null)
{
if (this.user.value.ruolo == "ascritto")
returnUrl =Path.AscrittiHome;
else if (this.user.value.ruolo == "segretario")
returnUrl = Path.SegretariHome;
else if (this.user.value.ruolo == "amministratore")
returnUrl = Path.AmmininistratoreHome;
if (returnUrl !== ""){
this.router.navigate([returnUrl] );
}
}
}
async checkUser(): Promise<void> {
const user = await this.authenticationService.checkUserRole$(this.selectedRole);
this.setUser(user);
}
async authenticateGoogle(): Promise<void> {
await this.authenticationService.authenticateGoogle();
await this.checkUser();
this.myRedirectTo();
}
}
那么login.component.html就很简单了
<mat-card-actions >
<button mat-button style="padding: 1rem;" (click)="authenticateGoogle()">
<mat-icon style="width: 50px; height:30px"
svgIcon="logo"></mat-icon> Login With Google
</button>
</mat-card-actions>
authentication.service 也很简单
public checkUserRole$(ruolo: string): Promise<User> {
const baseApiUrl = environment.baseapiUrl;
const ApiPath = apiRoutes.authCheckAscrittoRuolo;
let user = new BehaviorSubject<User>(
JSON.parse(localStorage.getItem("user"))
).value;
user.ruolo = ruolo;
return this.http.post<User>(`${baseApiUrl}${ApiPath}`,
user).toPromise();
}
当我点击按钮使用 Google 登录时,我通过了身份验证,但页面没有重新加载。不显示任何错误。
然后,因为我将用户保存在内存中,所以当我重新加载页面时,会调用 myRedirectTo() 并显示正确的内部页面。
问题出在哪里?我有什么不明白的地方?
【问题讨论】:
标签: google-authentication angular11