我正在尝试创建一个网站后端,我需要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;
}
}
**我的问题是,当网址为/ admin时,canActivate会生效,如果我获得本地存储,我将导航到管理员/信息中心。
但是如果用户注销,那么在这种情况下/ admin应该是loginform,但是如果我导航到/ admin如果没有登录则会进入canActivate并再次将它们放在本地存储中,所以它会转到admin等等。那么解决这个问题的正确方法是什么。
提前致谢。
答案 0 :(得分:1)
目前还不清楚您要尝试完成的内容,但使用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;
}