【发布时间】:2016-07-19 19:57:46
【问题描述】:
我正在使用 node.js 中的 Passport 实现 Facebook 身份验证。我可以成功地从 Facebook 获取用户个人资料。问题是,代码应该将用户重定向到successRedirect:/profile,但它总是转到/fbFailure。无论我尝试什么,它总是会转到 url:somesite.com:6161/fbFailure#=
护照中间件代码:
var FacebookStrategy = require('passport-facebook').Strategy;
var models = require('../models');
passport.use('facebook', new FacebookStrategy(
{
clientID: '1735552370024305', clientSecret: 'a004f1aee925b615022d7573984d5c26', callbackURL: "http://www.somesite.com:6161/facebookSuccess", profileFields: ['id', 'displayName', 'photos', 'emails'],
},
function(access_token, refreshToken, profile, done) {
console.log('profile', profile);
models.Member.findOne({ '__id' : profile.id }, function(err, user) {
if (err)
return done(err);
if(user){
return done(null, user);
}
done(null, user);
})
}
));
我的路线:
app.get('/facebook', passport.authenticate('facebook', { scope : 'email' }));
app.get('/facebookSuccess', passport.authenticate('facebook', {
successRedirect : '/profile',
failureRedirect : '/fbFailure'
}));
app.get('/profile', function(req, res, next) {
res.send('Successfully authenticated');
});
app.get('/fbFailure', function(req, res, next) {
res.send('Failed to authenticate');
});
控制台输出:
json:
{ id: '10154130288931542',
name: ‘Tom Verra’,
picture: { data: [Object] },
email: ‘tom.vera@mysite.com' } }
GET /facebookSuccess?code=AQBzdIfKPQ..............YU6TvYuf......
任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
检查您的
passport.deserializeUser(callback)和passport.serializeUser(callback)中间件。 -
护照序列化器,反序列化器在本地和 facebook 策略中都很常见。这就是我所拥有的。 passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(user, done) { done(null, user); });
标签: node.js facebook authentication passport.js