【发布时间】:2018-08-18 18:21:46
【问题描述】:
我遵循了一个关于在我的应用程序上使用假后端设置 JWT 身份验证的教程,但我遇到了身份验证问题。事实上,我只是想访问一个客户端面板或一个具有两个不同角色的“管理员”面板,管理员角色是“客户”和“顾问”。
文件:app.routing.ts
const appRoutes: Routes = [
{
path: '',
component: AdvisorHomeComponent,
canActivate: [AuthGuard],
data: {
expectedRole: 'conseiller'
}
},
{
path: '',
component: ClientHomeComponent,
canActivate: [AuthGuard],
data: {
expectedRole: 'client'
}
}
{ path: '', component: LoginComponent},
{ path: 'login', component: LoginComponent },
{ path: 'register', component: RegisterComponent },
// otherwise redirect to login
{ path: '**', redirectTo: '/login' }
];
文件:auth.guard.ts
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const expectedRole = route.data.expectedRole;
let currentUser = JSON.parse(localStorage.getItem('currentUser'));
alert(expectedRole);
if (currentUser && currentUser.statut == expectedRole) {
// logged in so return true
return true;
}
// not logged in so redirect to login page with the return url
this.router.navigate(['/login'], { queryParams: { returnUrl: state.url
}});
return false;
}
}
我注意到的错误是,当我尝试以“conseiller”状态登录时,它可以工作,因为信息位于我的配置中的第一位,但如果我尝试以“client”状态登录,它不起作用,当我执行 alert(expectedRole);
时,它仍然向我显示“conseiller”状态我认为我的路径设置或类似的东西有问题。放纵一下,我是 Angular 的初学者。 ;)
谢谢,
【问题讨论】:
-
可能是错字 currentUser.statut 应该是 currentUser.status
标签: angular authentication frontend