【问题标题】:Node.js: Facebook returns me undefined instead of profile?Node.js:Facebook 返回我未定义而不是个人资料?
【发布时间】:2014-11-24 09:16:54
【问题描述】:

我想对我的应用程序进行 GoogleFacebook 身份验证。我在前端使用AngularJS,在我的服务器上使用node.js

这是我在node.js 服务器上的 Facebook 身份验证功能:

var User = require('./user.js'),
    request = require('request'),
    env = process.env.NODE_ENV = process.env.NODE_ENV || 'development',
    config = require('./config.js')[env],
    createSendToken = require('./jwt.js'),
    qs = require('querystring');

module.exports = function (req, res) {
    var accessTokenUrl = 'https://graph.facebook.com/oauth/access_token';
    var graphApiUrl = 'https://graph.facebook.com/me';

    var params = {
        client_id: req.body.clientId,
        redirect_uri: req.body.redirectUri,
        client_secret: config.facebookAuth.clientSecret,
        code: req.body.code
    };

    console.log(req.body.code);

    request.get({
        url: accessTokenUrl,
        qs: params
    }, function (err, response, accessToken) {
        accessToken = qs.parse(accessToken);

        request.get({
            url: graphApiUrl,
            qs: accessToken,
            json: true
        }, function (err, response, profile) {
            User.findOne({
                facebookId: profile.id // <-- fails here 
            }, function (err, existingUser) {

                if (existingUser)
                    return createSendToken(existingUser, res);

                var newUser = new User();
                newUser.facebookId = profile.id;
                newUser.displayName = profile.name;
                newUser.email = profile.email;
                newUser.save(function (err) {
                    createSendToken(newUser, res);
                })

            })
        });
    });
}

然后赋值给这个post

app.post('/auth/facebook', facebookAuth);

前端工作正常(我使用的是satellizer)。

我在 Google+ 上做了几乎相同的事情,而且效果很好,但在 Facebook 上却不行。

我的 Facebook 应用配置正确(我已将 http://localhost:3030/ 添加到网站 URL 和移动网站 URL)。

现在,当我运行我的应用并按下 Facebook 按钮时,我在服务器上收到以下错误:

                            facebookId: profile.id
                                               ^
   TypeError: Cannot read property 'id' of undefined

所以这意味着profileundefined

}, function (err, response, profile) {

为什么 Facebook 向我返回了一个未定义的个人资料?

我该如何解决?

【问题讨论】:

    标签: javascript angularjs node.js facebook-graph-api authentication


    【解决方案1】:

    检查err中的值

            json: true
        }, function (err, response, profile) {
            User.findOne({
                facebookId: profile.id // <-- fails here 
    

    回答你的问题

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 2021-07-24
      • 2015-05-02
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      相关资源
      最近更新 更多