gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:28:24 26 4
gpt4 key购买 nike

我正在尝试创建一个网站后端,我需要在 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 上,他们应该是登录表单,但是如果我导航到/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;
}

关于javascript - Angular 2执行登录身份验证(我进入无限循环。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43602318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com