【问题标题】:Facebook authentication using Passport in Node.js在 Node.js 中使用 Passport 进行 Facebook 身份验证
【发布时间】: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


【解决方案1】:

您可以尝试使用 res.redirect('/profile'); 进行重定向,就像在 GitHub 上的 passport-facebook 自述文件 (https://github.com/jaredhanson/passport-facebook#authenticate-requests) 中所做的那样:

app.get('/facebookSuccess',
  passport.authenticate('facebook', { failureRedirect: '/fbFailure' }),
  function(req, res) {
    res.redirect('/profile');
  });

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 2022-07-11
    • 2018-02-04
    • 2016-05-18
    • 2018-01-29
    • 1970-01-01
    • 2016-08-15
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多