2017-09-14 105 views
0

我想用NodeJS + Restify和PassportJS編寫REST-API進行身份驗證。 當用戶登錄時,我生成一個sessionId並將其存儲在創建自己的會話中。req.user未定義

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

我從來沒有使用過這種策略,只有本地策略。在本地,你需要有一個函數來序列化和反序列化用戶。這是一個desarialize函數,它可以讓用戶稍後通過req.user訪問該用戶。你不錯過這個功能嗎? – yBrodsky

+0

@yBrodsky,你說得對,這些功能缺失。我添加他們就像這裏描述的:https://stackoverflow.com/questions/27637609/understanding-passport-serialize-deserialize 但req.user仍未定義。 – TSM

回答

1

正如我從this example中的代碼得到的回調cb遵循標準節點格式,所以得到一個錯誤作爲第一個參數和用戶作爲第二個。我認爲回調是設置req.user和管理所有post-auth樣板文件。你應該嘗試稱之爲`cb(null,user)