Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular 2执行登录身份验证(我正在进入无限循环。)_Javascript_Angular_Typescript_Angular2 Routing - Fatal编程技术网

Javascript Angular 2执行登录身份验证(我正在进入无限循环。)

Javascript Angular 2执行登录身份验证(我正在进入无限循环。),javascript,angular,typescript,angular2-routing,Javascript,Angular,Typescript,Angular2 Routing,我正在尝试创建一个网站后端,我需要在Angular 2中对其进行用户身份验证。但我无法解决一些问题,这就是我正在做的 这是我的路由文件 const appRoutes: Routes = [ { path: 'admin', component: AdminloginComponent, canActivate: [LoggedInGuard] }, { path: '', component: HomepageComponent }, { path

我正在尝试创建一个网站后端,我需要在Angular 2中对其进行用户身份验证。但我无法解决一些问题,这就是我正在做的

这是我的路由文件

const appRoutes: Routes = [
 {
   path: 'admin',
   component: AdminloginComponent,
   canActivate: [LoggedInGuard]
 },
 {
   path: '',
   component: HomepageComponent
 },
 {
   path: '**',
   component: OurservicesComponent
 },
];
这是我的gaurd文件://成功登录后,我正在设置是否已登录到本地存储中

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;,不带返回真

或者

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


嗨,冈特。。谢谢回复,实际上我想在angular2中进行登录验证,我发现我们应该使用CanActivate。我遵循了,但在这里,每个人都在路径:,上使用canactivate,但我认为它应该在/admin上。这是错误的。你可以提供一些参考。关于什么,请参考?只是前后不一致。如果您返回true,则表示可以继续导航,但同时导航离开,但另一个选项是您不做任何操作,只是发出信号,表示应阻止继续导航。您好,您能在这个问题上帮助我吗:。提前谢谢
  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    if(localStorage.getItem("is_logged_in")) {
      this.router.navigate(['/admin/dashboard']);
      return false;
    }
    return true;
  }