第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將值從一個函數傳遞到另一個函數

將值從一個函數傳遞到另一個函數

翻翻過去那場雪 2023-07-20 10:10:08
所以我正在做一個基于角色的訪問應用程序,并將用戶的角色嵌入到 JWT 中。當我解碼令牌時,我得到了id, role.... 現在我有一個函數可以檢查標頭中的令牌x-auth-token。這就是函數的樣子。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                                            return controller(httpRequest)                                      })                                                                  }我還有一個檢查角色的函數,它與函數類似decodeToken,這就是roleCheck函數的樣子。export function roleCheck(controller) {  return wrapAsync(async (httpRequest) => {    const token = httpRequest.headers['x-auth-token']    const decoded = jwt.verify(token, process.env.JWT_SECRET)    if (decoded.role !== 'admin') {      throw new UnauthorizedError(        'You do not have the authorization to perform this action'      )    }    return controller(httpRequest)  })}現在,這里有相當多的代碼重復。我可以解決此問題的一種方法是還檢查函數中的角色decodeToken,但該方法將導致沒有將角色admin附加到傳入負載的用戶無法訪問所有路由。現在我的問題是我該如何通過這個const token = httpRequest.headers['x-auth-token']const decoded = jwt.verify(token, process.env.JWT_SECRET)從decodeToken功能到roleCheck功能。另外,這是函數組合的用例嗎?我覺得代碼可以比這干凈得多,但我只是不知道如何實現這一點。通常,路線如下所示export function config(router) {  router    .post('/', expressCallback(decodeToken(roleCheck(postProduct))))    .get('/', expressCallback(decodeToken(getProducts)))    ...  return router}因此,decodeToken首先調用 ,然后在roleCheck請求到達postProduct控制器之前調用 。通過這種方式,從標頭獲取令牌并進行解碼,然后控制器可以根據角色采取行動。任何幫助將不勝感激,謝謝。
查看完整描述

1 回答

?
慕工程0101907

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


查看完整回答
反對 回復 2023-07-20
  • 1 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號