如何在Guard运行之前将isSignedIn设置为true?

时间:2016-06-03 21:45:01

标签: typescript angular router rxjs5 ngrx

我正在使用 ngrx / router

我有LoginGuard,当我打开需要登录的页面时,LoginGuard会在isSignedIn设置为true之前运行。所以当时isSignedInundefined

@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();
  }
}

我在应用的开头设置了isSignedIntrue,这是我脑海中最早的地方。

class App implements OnInit {
  ngOnInit() {
    // I set isSignedIn in UserService to true here after I got user info from the server
  }
}

但也许还不够早?那么如何在 Guard 运行之前将isSignedIn设置为true?感谢

1 个答案:

答案 0 :(得分:0)

我的应用实际上以异步方式使用服务检查访问。

@rtytgat给出了解决方案。谢谢!

  

与Guard一起检查,如果没有登录,请将它们发送到“登录”页面,   并在确认登录后将其发回。