我尝试使用路由保护来检查我在登录路由之前是否登录过的用户。因为我有一个replaySubject包含true,如果用户登录。 当我调用我的方法来检查用户是否登录时,它的值为true,但是当在canActivate方法中调用相同的方法时,它的值为空,因此它不会返回任何内容。
canActivate
方法:
//inside AuthService
canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean> {
return this.isLoggedIn();
}
isLoggedIn
方法:
//inside AuthService
isLoggedIn() {
return this.loggedIn
.first()
.do(user => {
console.log(user);
})
}
loggedIn
主题:
//inside AuthService
loggedIn: Subject<boolean> = new ReplaySubject<boolean>(1);
链接:
<a (click)="checkLogin()" [routerLink]="['/table']">some text</a>
checkLogin
方法:
checkLogin() {
this.auth
.isLoggedIn()
.toPromise()
.then(data => {
// this returns true
console.log("login status is", data);
});
}
路由模块:
const appRoutes: Routes = [
{ path: "home", component: HomeComponent },
{ path: "table", component: TableComponent, canActivate: [AuthService] },
{ path: "", redirectTo: "/home", pathMatch: "full" }
];
角度版本:5.2.8, 角路由器版本:5.2.8
答案 0 :(得分:0)
谢谢皮埃尔指出我正确的方向
结果我在我的应用程序组件和我的应用程序模块中提供了我的身份验证服务 这反过来又让我在应用程序中有两次我的auth服务, 一个用于我的组件,一个用于我的模块。
我刚刚从应用程序组件中删除了该服务并且它正常工作