angular - 我不想在重新加载页面 Angular 4 后注销

标签 angular typescript logging angular-cli

刷新页面后登出,如何在重新加载后保持用户登录?

这是 header.component.html:

<li class="nav-item dropdown-menu-left" ngbDropdown dir="rtl">
    <a href="javascript:void(0)" class="nav-link" ngbDropdownToggle> John Smith </a>
    <div class="dropdown-menu dropdown-menu-left">
        <a class="dropdown-item" (click)="onLoggedout()">logout</a>
    </div>
</li>

这是注销功能:

onLoggedout() {
    this.authService.logout();
    this.router.navigate(['/login'])
}

这是 authService:

logout(){
    firebase.auth().signOut();
    this.token = null;
}

这是 auth-guard.ts:

constructor(private router: Router, private authService:AuthService) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    return this.authService.isAuthenticated();
}

最佳答案

我了解您的问题,您需要按照以下步骤操作:

  • Firstyl 当您登录时,您需要将您的 token 存储在本地存储中。 (我假设 token 关键字作为用户登录的标志)

  • 注销后使用

    清除本地存储

    localStorage.clear();

  • 根据您的情况,一旦按下浏览器用户的后退按钮,登录前将不允许访问页面,为此您需要在 authGuard 文件中进行如下更改

     constructor(private router: Router, private authService:AuthService) { }
     canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
       if(localStorage.get('token'))
           return true;
       else
           return false;
      }
    

如果仍然需要任何帮助,请告诉我。

关于angular - 我不想在重新加载页面 Angular 4 后注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45818367/

相关文章:

angular - 字符串中的 <a(点击)>

javascript - Angular 是否具有 JQuery find() 的等价物

typescript - Ionic2:使用 navParam 在页面之间发送参数(单击返回导航按钮时)

typescript - 等待非 Promise 函数时没有 typescript 警告

node.js - 无法在 typescript 构建中包含 .key 文件

java - Maven 插件记录器兼容性

python - 如何在 Python 中的模块之间共享记录器实例?

python |创建一个文件并在每次运行时递增名称

css - 垫子菜单主题颜色不变

javascript - 在网格列表中创建 'view' 链接,导航到详细路线,例如 Hero/:id in Angular