2017-09-14 5 views
0

NodeJS + RestifyとPassportJSを使用してREST-APIを作成して認証したいと考えています。 ユーザーがログインすると、私はsessionIdを生成し、それを自分で作成したセッションに保存します。req.user is undefined

var Passport    = require('passport'); 
var PassportBearerStrategy = require('passport-http-bearer').Strategy; 
// Authentication 
Passport.use(new PassportBearerStrategy(function(sessionId, cb) { 
    Auth.getSession(sessionId, function(userId){ 
     cb((!!userId), { userId: userId }, userId); 
    }); 
})); 

server.get(
    '/user', 
    Passport.authenticate('bearer'), 
    function(req, res, next){ 
     console.info(req.user ); // undefined 
     respond(res, {}); 
     return next(); 
    } 
); 

すべてが機能怒鳴るで、req.userundefinedであること、を除いて動作します。私はあなたがセッションを有効にする必要があることを読んだ。しかし、私はすでに自分のセッションを実装していますが、別のセッションは必要ありません。
私が必要とするのは、もし私がcb(true, user)と言うなら、それは以下の関数に到着します。

これを解決する方法はありますか?

+1

私はその戦略を使ったことが一度もなく、ローカル戦略だけです。ローカルでは、ユーザーをシリアライズおよびデシリアライズする機能が必要です。これは、後でreq.userを介してアクセスできるユーザーを提供するdesarialize関数です。この機能が欠けていませんか? – yBrodsky

+0

@yBrodsky、そうです、これらの機能はありません。私は正確にここに記載されているようにそれらを追加:https://stackoverflow.com/questions/27637609/understanding-passport-serialize-deserialize しかし、req.userは未定義です。 – TSM

答えて

1

this exampleのコードからは、コールバックcbが標準ノード形式に従うので、最初の引数としてエラーが、2番目のユーザーとしてエラーが発生します。コールバックはreq.userを設定し、すべてのポスト認証の定型文を管理するものだと思います。あなたは `cb(null、user)と呼ぶべきです。

関連する問題