angular - 如何用 Angular 6 做 RoleGuard?
问题描述
如何从令牌中获取用户角色?
我使用 decode 带来了令牌,angular2-jwt
但是当我想放一个
CanAccess 管理路由它向我发送了一个false
值
当我这样做时,console.log(tokenPayLoad)
它会给我带来解码的令牌
在 Chrome DevTools 的Apshowsation视图中,它在 localStorage 中显示用户
这是我的路线声明
{
path: 'dashboard',
component: DashboardComponent,
canActivate: [RoleGuard],
data: {expectedRole: 'admin'}
},
这是我的role-guard.service.ts
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot } from "@angular/router";
import { JwtHelperService } from "@auth0/angular-jwt";
import { AuthService } from '../user/auth.service';
@Injectable({
providedIn: 'root'
})
export class RoleGuardService implements CanActivate {
jwtHelper = new JwtHelperService()
constructor(
public auth: AuthService,
public router: Router
) { }
canActivate(route: ActivatedRouteSnapshot): boolean {
const expectedRole = route.data.expectedRole;
const token = localStorage.getItem('token')
const tokenPayLoad = this.jwtHelper.decodeToken(token)
if (!this.auth.isAuthenticated() || tokenPayLoad.role !== expectedRole) {
console.log(tokenPayLoad)
this.router.navigate(['/'])
window.alert('No tienes permisos para acceder a esta ruta.')
return false
}
return true
}
}
解决方案
感谢 user184994 的帮助,我看到我忘记将角色保存到令牌中
所以我将角色放入令牌中
const token = jwt.sign({ userId: user._id, role: user.role }...
推荐阅读
- php - 按 acf 日期转发器字段对自定义帖子类型进行排序
- javascript - 如何替换长文本子字符串中的特定字符?
- javascript - 拒绝连接到“https://...URL”,因为它违反了以下内容安全策略指令:“connect-src 'self'
- bash - make: *** 在 makefile 中使用 diff 时出现错误 1
- python - 应用样式属性对象后如何打印熊猫数据框
- python - 熊猫:根据分数对游戏进行排名
- java - 如何将变量从回调存储到全局类变量
- java - 来自另一个活动的图像调用的 Arraylist 并尝试在列表视图中显示
- swift - ForEach 视图 SwiftUI 之间的奇怪空间
- react-native - 反应原生画布上的事件