Angular 2——在guard启动之前初始化会话服务

Angular 2 - init a session service before guard kicks in

本文关键字:初始化 会话 服务 启动 guard Angular      更新时间:2023-09-26

我有这个守卫来监视应用程序中受保护的路由基本上,我的会话服务从NgOnInit中的localStorage提取它的凭据,然后守卫应该询问服务它是否有凭据,这样它就知道是否应该批准这个路由

import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { SessionService } from './../session/session.service'
 
@Injectable()
export class AuthGuard implements CanActivate {
 
    constructor(
    private router: Router,
    private sessionService: SessionService
    ) { }
 
    canActivate() {
        //without this line this won't work
        //this.sessionService.loadUser();
        if (this.sessionService.isValidSession()) {
            // logged in so return true
            return true;
        }
 
        // not logged in so redirect to login page
        this.router.navigate(['/login']);
        return false;
    }
}

这是我的会话服务

export class SessionService implements OnInit {
 .
 .
 .
constructor(
    private authService: AuthenticationService,
) {
    this.timeout = null;
}
ngOnInit() {
    this.loadUser();
}

现在的问题是,ngOnInit在我的会话服务不会自动调用,我必须显式调用loadUser()内部的保护,这不是我想做的

任何想法如何使会话服务的ngOnInit得到执行之前的canActive的警卫?

非常感谢!

不要只使用组件的服务使用"OnInit"。相反,在服务的构造函数

中调用所需的加载逻辑