登录后,Angular Authgaurd不会将应用程序重定向或强制到首页

问题描述

路由模块

{
    path:'login',component:LoginComponent
    },{
  path: '',component: DefaultComponent,canActivate:[AuthGuard],children: [{
    path: '',component: DashboardComponent
  },

登录component.ts

let hey=data["API Key"]
    let id=data["id"]
    console.log(id);
    console.log(hey);

    localStorage.setItem("key",hey),this.router.navigateByUrl('/');
    // window.location.reload(true)

Authgaurd.ts

canActivate():boolean{
  if (this._authsevice.loggedIN()){
    return true
  }
  else{
    this._router.navigate(['/login'])
    return false
  }
}

Authservice.ts

export class AuthService{

     loggedIN(){
         return !!localStorage.getItem('key')
     }
}

一经身份验证,它就会创建一个密钥并将其存储 但我不明白为什么该页面仍处于登录页面而没有重定向或导航并强制authservice搜索密钥
当我强制重新加载页面时 我仍然获得登录页面,并且通过第二次身份验证,我可以访问所有其他页面

我不明白为什么 以及如何在存储密钥后强制角度应用程序查看

解决方法

您可以返回网址树,您应该这样做:

canActivate(): boolean | UrlTree {
  if (this._authsevice.loggedIN()){
    return true
  }
  return this._router.navigate(['/login'])
}

回答您的问题:

使用Observable作为BehaviourSubject的登录状态,您将Observable<boolean | UrlTre>用作canActivate中的返回值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...