我回答是否爲時已晚,但我認爲我的解決方案更好,更傳統。 在官方文檔here。有一節「協會確認回調」,其中提到,如果我們的戰略的passReqToCallback選項設置爲真,這使REQ,它將作爲第一個參數驗證傳遞迴電話。
所以我FacebookStrategy現在看起來像:
var User = require('../models/UserModel.js');
var FacebookStrategy = require('passport-facebook').Strategy;
exports.facebookStrategy = new FacebookStrategy({
clientID: 'REPLACE_IT_WITH_CLIENT_ID',
clientSecret: 'REPLACE_IT_WITH_CLIENT_SECRET',
callbackURL: 'http://localhost:3000/auth/facebook/callback',
passReqToCallback: true
},function(req,accessToken,refreshToken,profile,done){
User.findOne({
'facebook.id' : profile.id
},function(err,user){
if(err){
done(err);
}
if(user){
req.login(user,function(err){
if(err){
return next(err);
}
return done(null,user);
});
}else{
var newUser = new User();
newUser.facebook.id = profile.id;
newUser.facebook.name = profile.displayName;
newUser.facebook.token = profile.token;
newUser.save(function(err){
if(err){
throw(err);
}
req.login(newUser,function(err){
if(err){
return next(err);
}
return done(null,newUser);
});
});
}
});
}
);
在我的代碼示例我已經增加了一些邏輯保存在數據庫中的會話保存用戶信息的用戶信息和。我認爲這可能對人們有幫助。
req.user給出存儲在護照會話中的用戶信息。
這也適用於我與facebook身份驗證。 – TulioPa 2013-11-12 03:56:00
謝謝!這是一個很大的幫助。 – Tyguy7 2015-04-14 15:26:17