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)來檢查其他角色。您也不需要過多擔心代碼重復,因為這些函數只需要在應用程序中定義一次。
添加回答
舉報