2017-09-28 11 views
1

例にジャンプしましょう。私は輸入、輸出のようないくつかの部分をスキップします。ExpressJS + JWT。認証データを取得する適切な方法は何ですか?

function getMyBooks(successCallback) { 
    db.query('SELECT * FROM book b WHERE b.id_user=?', [Auth.getLoggedUID()], function(rows) { 
     successCallback(rows); 
    }); 
} 

私の質問:モデル/ book.jsと呼ばれるモデルでは、私はその機能を持っている、

router.get('/my-books', function(req, res) { 
    if(Auth.authenticated(req,res)) { 
     Book.getMyBooks(function(rows) { 
      response.operationSucceed(req, res, rows); 
     }); 
    } 
}); 

その後:

私は、コントローラと呼ばれるコントローラ/ 1の経路とbook.jsを持っていますAuth.getLoggedUID関数についてです。 私はJWT認証を持っていて、ペイロードにUIDを持っていると仮定しています(それは容認できますか?)、それを取り出す最良のオプションは何ですか?私は認証データが必要なすべての機能に毎回reqを渡すことを除いて、何かありますか?

私は関数内で関数を実行している可能性がありますが、reqの両方を渡してユーザーIDを取得する必要がありますか?このように:

function getBooks(req) { 
    getMyBooks(req); 
    getCriminalBooks(req); 
    getEvenOtherBooksByAuthor(req, authorId); 
} 

正に私はそれを好まない。 私の全体のコンセプトが間違っていて、別のことをしているはずですか? このようなシナリオで誰かが私に正しい方向を向けることができますか?

答えて

1

あなたはヘッダにUIDを渡し、としてあなたのコントローラ内のそれを取得することができます。そして、あなたはどこにでも繰越全体REQオブジェクトへの必要はありませんしたい、これまでこのUIDを渡す

var uid =req.header('UID'); 

1

ミドルウェア機能を使用できます。エンドポイントにヒットするすべてのリクエストに、トークンを確認してデコードする必要があるとしましょう。その後、デコードされたコンテンツをreqオブジェクトに設定することができます。したがって、次のようなものがあります。

​​

この後、1つのエンドポイントごとにペイロードにアクセスできます。たとえば、コントローラの中には、次のようなものがあります。

関連する問題