2013-05-11 43 views
6

我正在編寫使用node.js和passport.js進行身份驗證的簡單應用程序。在passport.js中的serializeUser函數中訪問請求對象

我可以訪問serializeUser中的請求對象嗎?

+0

我想問這個問題。 [看來現在已經有一種方法可以做到這一點](https://github.com/jaredhanson/passport/issues/111),但不幸的是,我對護照的理解並不十分熟悉它的實際工作原理。有人可以請回答這個解釋'req'是如何在'passport.deserializeUser(function(id,done)''內訪問的? – laggingreflex 2014-07-06 00:10:56

回答

1

我認爲釔和laggingreflex問題略有不同:

要回答釔:

要訪問你所要做的是明確的中間件,將解決你的資源的授權內的請求對象。

function authMethod(req, res, next) { 
    if (req.isAuthenticated()) 
    { 
     console.log(req.user); 
     return next(); 
    } 
    res.status(401).send({user:undefined}); 
} 
app.get('/',authMethod,function(req,response) 
{ 
    res.status(200).send("OK"); 
} 

如果你做了正確的配置,Passaport將修改您的請求對象,所以你可以req.user訪問用戶信息。您還有一個方法req.isAuthenticated()來檢查第三方認證是否成功。

要回答laggingreflex:

您不能訪問請求對象內passport.deserializeUserpassport.serializeUser,因爲這些方法都是爲了處理的會話中的用戶信息序列化(請看github解釋)。這些方法接收一個對象和一個函數作爲參數。在serializeUser上,第一個參數是包含用戶信息的對象,您將序列化並傳遞給done函數(回調)。在deserializeUser第一個參數是序列化的對象,您必須執行相反的操作。

相關問題