Passport.js是否有可選的身份驗證中間件?Passport.js可選身份驗證
比方說,我有一條路線,/api/users
。我只想向公衆提供一個用戶列表,但是要認證的人員,我想添加更多的字段。
目前我只是做同樣的事情啞自定義的方法,但我不知道:
- Passport.js已經提供了這樣的事情或
- 我怎麼能做出這樣的部分護照,就像插件一樣。
我的方法,大概,看起來像
function optionalAuth(req, res, next) {
var authHeader = req.headers.authorization;
var token = parseToken(authHeader); // just getting the OAuth token here
if(!token) {
return next();
}
User.findOne({
token: token
}, function(err, user) {
if(err) {
return res.json(401, {message: 'auth expired'});
};
if(user) {
req.user = user;
}
next();
});
}
然而,這似乎是愚蠢的我,也沒有在護照認證 - strategies.js或其他一些身份驗證層,我認爲它應該是。有什麼更好的方法來做到這一點?你告訴我,如果我做回401正確的事情,如果我找到一個令牌,但它是無效的
加分:)
假設你有基本的工作(認證用戶),我認爲你可以使用'req.isAuthenticated()'(這是Passport定義的東西)來檢查你是否要返回額外的或不是。 – robertklep 2014-09-12 12:42:19
我無法使用req.isAuthenticated,因爲我無法在此之前放置passport.authenticate()。爲什麼?因爲未經認證的用戶會被拒絕。 我沒有會話,這是一個無狀態的API,只是一個不記名的令牌。如果我把passport.authenticate()放在路由中,有些用戶會得到401,我希望他們通過,只能得到有限的信息。 – Zlatko 2014-09-14 08:26:09