代码之家  ›  专栏  ›  技术社区  ›  TheShield

Passport Facebook身份验证返回未定义?

  •  0
  • TheShield  · 技术社区  · 6 年前

    我的facebook策略如下:

    passport.use(new facebookStrategy({
    
        clientID: envVars.facebook.clientID,
        clientSecret: envVars.facebook.clientSecret,
        callbackURL: envVars.facebook.callbackURL,
        passReqToCallback : true,
        profileFields: ['id', 'emails', 'displayName']
    },
    
    function(token, refreshToken, profile, done) {
        console.log(profile); //prints out undefined
    }
    ));
    

    我的路线处理如下:

    router.get('/facebook', passport.authenticate('facebook'));
    
    router.get('/auth/facebook/redirect', passport.authenticate('facebook'), 
    function(req, res){
        res.redirect("/profile");
    });
    

    我的代码成功地将用户引导到Facebook,在那里,他们会得到允许我的应用程序访问其数据的权限提示。曾经接受我的安慰。日志(配置文件)激发,但即使用户接受权限,它仍打印出未定义的内容?我已经搜索了文档,似乎无法找出哪里出了问题。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Rajan Panneer Selvam    6 年前

    passReqToCallback似乎有问题。请参考此SO问题: Using PassportJS, how does one pass additional form fields to the local authentication strategy?

    在您的情况下,删除passReqToCallback:true标志。

    passport.use(new facebookStrategy({
    
        clientID: envVars.facebook.clientID,
        clientSecret: envVars.facebook.clientSecret,
        callbackURL: envVars.facebook.callbackURL,
        profileFields: ['id', 'emails', 'displayName']
    },
    

    另一个选项是修改回调并使用第一个参数,即请求对象。

    function(req, email, password, done) {
        // now you can check req.body.foo
    }