簡體   English   中英

Angular 2執行登錄身份驗證(我進入了無限循環。)

[英]Angular 2 Perform Login Authentication (i am getting into infinite loop.)

我正在嘗試創建一個需要在Angular 2中進行用戶身份驗證的網站后端,但是我無法解決某些問題,這就是我正在做的事情。

這是我的路由文件。

const appRoutes: Routes = [
 {
   path: 'admin',
   component: AdminloginComponent,
   canActivate: [LoggedInGuard]
 },
 {
   path: '',
   component: HomepageComponent
 },
 {
   path: '**',
   component: OurservicesComponent
 },
];

這是我的gaurd文件://成功登錄后,我在本地存儲中設置了is_logged_in。

import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
@Injectable()
export class LoggedInGuard implements CanActivate {
 constructor(private router: Router) { }

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
  if(localStorage.getItem("is_logged_in"))
  {
      this.router.navigate(['/admin/dashboard']);
      return true;
  }
  return false;
}

}

**我的問題是,當url為/ admin時canActivate生效,如果我獲得本地存儲,我將導航至admin / dashboard。

但是,如果用戶已注銷,則在這種情況下,在/ admin上他們應該是loginform,但是如果我導航到/ admin(如果未登錄),它將進入canActivate,並且它們在本地存儲中也不存在,因此轉到admin等。 那么解決此問題的正確方法是什么。

提前致謝。

不清楚您到底想完成什么,但是使用router.navigate重定向應該return false; ,不return true;

要么

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    if(localStorage.getItem("is_logged_in")) {
      return true;
    }
    this.router.navigate(['/admin/dashboard']);
    return false;
  }

要么

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    if(localStorage.getItem("is_logged_in")) {
      this.router.navigate(['/admin/dashboard']);
      return false;
    }
    return true;
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM