【问题标题】:Angular 7 - AuthGuard not working when refresh browserAngular 7 - 刷新浏览器时AuthGuard不起作用
【发布时间】:2019-10-25 12:33:47
【问题描述】:

我遇到了 MEAN 堆栈应用程序的 AuthGaurd 问题。当我浏览页面链接时,AuthGaurd canActivate 工作正常。但是当刷新页面时 - 页面不工作(无限期保持加载状态)

这里是 AuthGuard 实现 -

@Injectable()
export class AuthGuard implements CanActivate {
  constructor(@Inject(PLATFORM_ID) private platform: any, private router: Router, private logInService: LoginService) { }

  canActivate(route: ActivatedRouteSnapshot): boolean | Observable<boolean> | Promise<boolean> {
        if (isPlatformBrowser(this.platform)) {
            if (this.logInService.loggedIn && !this.logInService.isTokenExpired(this.logInService.getToken())) {
                return true;
            }

            this.router.navigate(['/user/login']);
            return false;
        }
    }
}

这是我的登录服务,它运行良好 -

public get loggedIn(): boolean {
    if (isPlatformBrowser(this.platform)) {
      return (localStorage.getItem(TOKEN_NAME) !== null);
    }
  }

isTokenExpired(token?: string): boolean {
    if (isPlatformBrowser(this.platform)) {
      if(!token) token = this.getToken();
      if(!token) return true;

      const date = this.getTokenExpirationDate(token);
      if(date === undefined) return false;
      return !(date.valueOf() > new Date().valueOf());  
    }
  }

getTokenExpirationDate(token: string): Date {
    const decoded = jwt_decode(token);

    if (decoded.exp === undefined) return null;

    const date = new Date(0);
    date.setUTCSeconds(decoded.exp);
    return date;
  }

我无法弄清楚这个问题。提前致谢!

【问题讨论】:

    标签: angular angular-services auth-guard


    【解决方案1】:

    你有什么错误吗?

    我想问题应该是你没有处理的问题发生在

    if (isPlatformBrowser(this.platform)) 返回 false。

    【讨论】:

    • 我需要检查它到浏览器,从服务器端它会返回 false
    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多