【问题标题】:Passport Facebook Verify Callback not CalledPassport Facebook 验证未调用回调
【发布时间】:2016-08-10 11:02:06
【问题描述】:

我正在制作一个节点应用程序,当我尝试在 Facebook 中使用护照时,验证回调没有运行(没有记录任何内容)。任何帮助将不胜感激。

var express = require('express');
var routes = require('./routes/routes.js');
var layout = require('./routes/layout.js');
var facebook = require('./routes/facebook.js');
var editprof = require('./routes/editprof.js');
var app = express();
var vogels = require('vogels');
var passport = require('passport');
var FacebookStrategy = require('passport-facebook').Strategy;
var configAuth = require('./config/auth');


app.use(passport.initialize());
app.use(passport.session());

...

passport.use(new FacebookStrategy({

    // pull in our app id and secret from our auth.js file
    clientID        : configAuth.facebookAuth.clientID,
    clientSecret    : configAuth.facebookAuth.clientSecret,
    callbackURL     : 'http://localhost:8080/auth/facebook/callback'

},

// facebook will send back the token and profile
function(token, refreshToken, profile, done) {
    console.log("TOKEN",token);
    // asynchronous
    process.nextTick(function() {
        console.log("TOKEN",token);
        console.log("ID", profile.id);
        return done(null, profile);

    });

}));

...

app.get('/auth/facebook', passport.authenticate('facebook'));
app.get('/auth/facebook/callback', facebook.callback);

【问题讨论】:

  • 为什么还没有回答?
  • 我遇到了同样的问题。你修过吗?

标签: node.js facebook callback verify passport.js


【解决方案1】:

我也遇到过同样的问题,这是graph.facebook.com 的 DNS 问题。这可以防止passport-facebook 后面的passport-oauth2 模块获取FB 令牌。然后跳过verify 回调。

你可以在这里测试一下你的问题是否和js sn-p一样:

const dns = require('dns')
dns.lookup('graph.facebook.com', console.log)

如果此代码返回类似于:

{ Error: getaddrinfo ENOTFOUND graph.facebook.com
    at errnoException (dns.js:28:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:73:26)
  code: 'ENOTFOUND',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'graph.facebook.com' }

那么您的问题确实是由 DNS 问题引起的。

有多种方法可以解决 DNS 问题,但对我来说最简单的方法是在我的 mac 上手动编辑我的 /private/etc/hosts 文件:

第一步:获取graph.facebook.com的IP:

nslookup graph.facebook.com

第 2 步:更新您的 /private/etc/hosts

sudo vim /private/etc/hosts

只需在文件底部添加一个新行(例如 graph.facebook.com)

第 3 步: 再次测试 dns.lookup('graph.facebook.com', console.log): 如果现在解决了这个问题,该命令应该返回类似于:

null '157.240.8.18' 4

希望这能解决您的问题。

干杯,

网卡

【讨论】:

    【解决方案2】:

    我为这个问题苦苦挣扎了几个小时。就我而言,问题出在Strategy 构造函数的callbackURL 属性上。当我尝试使用来自其他域的 URL 时未调用回调:

    passport.use(new Strategy({
        clientID: FACEBOOK_APP_ID,
        clientSecret: FACEBOOK_APP_SECRET,
        callbackURL: 'https://my.domain.com/authorize'
    } //callback
    )
    

    当我将它更改为它工作的同一域的链接时:

    passport.use(new Strategy({
        clientID: FACEBOOK_APP_ID,
        clientSecret: FACEBOOK_APP_SECRET,
        callbackURL: '/auth/facebook/callback'
    } //callback
    )
    

    另外,我已经在 express 中处理了这个 url:

    app.get('/auth/facebook/callback',
        passport.authenticate('facebook', {
            successRedirect: '/',
            failureRedirect: '/login'
        }));
    

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 2016-11-11
      • 2013-10-30
      • 1970-01-01
      • 2018-10-15
      • 2014-09-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多