1 回答
TA贡献1887条经验 获得超5个赞
您正在对令牌进行两次解码,但没有必要这样做。您正在对“decodeToken”中的令牌进行解码,并将新字段“user”附加到请求对象,该对象包含令牌中的所有解码信息(id、角色等) )。在“roleCheck”内部,您不需要再次解码令牌,因为您已经将所有解码信息存储在请求对象的“user”字段中。您所要做的就是访问此信息并检查角色。
解码令牌:
export const decodeToken = (controller) => {
return wrapAsync(async (httpRequest) => {
const token = httpRequest.headers['x-auth-token']
if (!token) {
throw new UnauthorizedError('No token, authorization denied.')
}
const decoded = jwt.verify(token, process.env.JWT_SECRET)
httpRequest.user = decoded //here you are storing the info in user field of httpRequest
return controller(httpRequest)
})
}
现在将名称“roleCheck”更改为“adminRoleCheck”之类的名称,用于检查用户是否为管理员。
管理员角色检查:
export function adminRoleCheck(controller) {
return wrapAsync(async (httpRequest) => {
if (httpRequest.user.role !== 'admin') {
throw new UnauthorizedError(
'You do not have the authorization to perform this action'
)
}
return controller(httpRequest)
})
}
同样定义其他函数(例如 customerRoleCheck)来检查其他角色。您也不需要过多担心代码重复,因为这些函数只需要在应用程序中定义一次。
添加回答
举报