我正在使用 ngrx / router 。
我有LoginGuard
,当我打开需要登录的页面时,LoginGuard会在isSignedIn
设置为true之前运行。所以当时isSignedIn
是undefined
。
@Injectable()
export class LoginGuard implements Guard {
constructor(private _router: Router, private _userService: UserService) { }
protectRoute({ route, params, isTerminal }: TraversalCandidate): Observable<boolean> {
return this._userService.checkSignedIn()
.map(isSignedIn => {
if (!isSignedIn) {
this._router.replace('/landing');
return false;
} else {
return true;
}
}).first();
}
}
我在应用的开头设置了isSignedIn
到true
,这是我脑海中最早的地方。
class App implements OnInit {
ngOnInit() {
// I set isSignedIn in UserService to true here after I got user info from the server
}
}
但也许还不够早?那么如何在 Guard 运行之前将isSignedIn
设置为true
?感谢
答案 0 :(得分:0)
我的应用实际上以异步方式使用服务检查访问。
@rtytgat给出了解决方案。谢谢!
与Guard一起检查,如果没有登录,请将它们发送到“登录”页面, 并在确认登录后将其发回。