WebアプリケーションとAPIプロバイダーの両方として使用したいnodejsアプリケーションを作成しています。ユーザーが認証されたら、後続のリクエストに使用されるトークンをそのユーザーに割り当てたいと思います。これは、セッション内のトークンを使用してユーザーをシリアル化および非シリアル化するだけなので、Webアプリケーションのパスポートでうまく機能します。ただし、APIリクエストに応答する場合、セッション情報を保存するために設定するCookieはありません。理想的には、パスポートはセッションとリクエスト本文の両方でトークンを探します。これを実現するためにパスポートを構成する方法はありますか?
リクエストごとにアクセストークンを使用するだけです。セッションを使用する必要はありません。ワークフローは次のとおりです。
POST /signin
/signin
にリダイレクトします。クライアントは、承認サーバーからアクセストークンを受信すると、サーバー上の保護されたリソースにリクエストを送信できます。例えば:
GET /api/v1/somefunction?token='abcedf'
参考文献
Bnuheroが述べているように、セッションは必要ありません(ただし、このアプローチにはメリットもあります)。これのために私が始めているボイラープレートプロジェクトがあります: https://github.com/roblevintennis/passport-api-tokens
代替手段であり、簡単にフォローできる方法を次に示します(ただし、セッションを使用します)。素敵な相互参照になるかもしれません: http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local
関連するもう1つのリファレンス: http://mherman.org/blog/2013/11/11/user-authentication-with-passport-dot-js/
NodejsのパスポートでisAuthenticated()メソッドを使用できます。すべてのルートでif(req.isAuthenticated())をチェックでき、すでに認証されている場合はルートにアクセスできるようになります。またはelseブロックで他の実行をリダイレクトまたは実行できます。 Passportでは、ログインに成功した場合はdone(null、user)を返すことができ、セッションが終了するまでデータをCookieに保存します。ユーザーでは、メール、パスワードなどのユーザーに関する情報を入力できます。
app.get('/home', (req, res) =>{
if(req.isAuthenticated()){
//render home page
} else {
// go back to the login page or throw soome error
}
})