【发布时间】:2014-11-24 09:16:54
【问题描述】:
我想对我的应用程序进行 Google 和 Facebook 身份验证。我在前端使用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
所以这意味着profile 是undefined:
}, function (err, response, profile) {
为什么 Facebook 向我返回了一个未定义的个人资料?
我该如何解决?
【问题讨论】:
标签: javascript angularjs node.js facebook-graph-api authentication