检索Facebook个人资料图片的URL
Retrieving Facebook Profile Picture URL
我在一个MEAN应用程序中使用satellizer进行身份验证。验证完成后,我想获得用户的个人资料图片。以下是我的代码:
Angular Controller
(function(){
'use strict';
angular
.module('nayakans07')
.controller('RegisterController', registerController);
function registerController ($scope, $auth) {
$scope.authenticate = function (provider) {
$auth.authenticate(provider)
.then(function (res) {
console.log(res);
}, authErrorHandler);
};
function authErrorHandler (err) {
console.log(err);
}
}
})();
Node.js路由处理程序
(function () {
'use strict';
var request = require('request');
var qs = require('querystring');
var tokenHelper = require('../helpers/tokenHelper.js');
var config = require('../config/configuration.js');
var Member = require('../models/memberModel.js');
module.exports = function (req, res) {
var accessTokenUrl = 'https://graph.facebook.com/oauth/access_token';
var grapApiProfileUrl = 'https://graph.facebook.com/me';
var graphApiProfileImageUrl = 'https://graph.facebook.com/me/picture?width=250&json=true';
var params = {
client_id: req.body.clientId,
redirect_uri: req.body.redirectUri,
code: req.body.code,
client_secret: config.FACEBOOK_SECRET
};
request.get({
url: accessTokenUrl,
qs: params
}, function (err, response, accessToken) {
accessToken = qs.parse(accessToken);
request.get({
url: grapApiProfileUrl,
qs: accessToken,
json: true
}, function (err, response, profile) {
console.log(profile);
Member.findOne({
facebookId: profile.id
}, function (err, existingMember) {
if (existingMember) {
return res.status(200).send({
user: existingMember,
token: tokenHelper.createToken(existingMember, req, res)
});
} else {
request.get({
url: graphApiProfileImageUrl,
qs: accessToken,
}, function (err, response, profileImage) {
console.log(profileImage);
var fbData = {
facebookId: profile.id,
fullName: profile.name,
email: profile.email,
profileImage: profileImage
};
return res.status(200).send(fbData);
});
}
});
});
});
};
})();
我从facebook获得访问令牌后,我用访问令牌调用https://graph.facebook.com/me/picture?width=250&json=true
端点以获得个人资料pic链接。在Facebook的API资源管理器调用相同的端点令牌我得到配置文件图像url,但当我从node.js端点处理程序调用它,我得到一些二进制数据。部分回应如下:
����JFIF���Photoshop 3.08BIM�gtc2XjTON-90Jqu9JFj83(bFBMD01000ac0030000b909000069110000fe120000dc14000069190000c02400002326000029280000872a0000fd3e0000��ICC_PROF
如何获取配置文件图像的URL而不是此响应
不确定这是否仍然是您正在使用的API版本的情况,但如果没有传递正确的参数,它会导致301重定向到图像(尽管他们的API Explorer建议…)您可以检查浏览器的网络监控来验证这一点。
有各种各样的来源,包括官方Facebook Graph-API文档,其中指出:默认情况下,此边将返回到图片图像的302重定向。要访问有关图片的数据,请在查询中包含redirect=false。
(来源:https://developers.facebook.com/docs/graph-api/reference/user/picture/#Reading)
以及一些(老的,但类似的)SO答案:https://stackoverflow.com/a/7881978/624590
你有几个选择。一种方法是添加redirect=false
查询参数(根据上面的Facebook文档)。
另一个选项是通过添加额外的查询参数&fields=url
显式地请求URL(我上面链接到的答案建议&fields=picture
,但据我所知,这已经过时了)。如果您需要响应中的高度和宽度,只需将它们添加到查询:&fields=url,height,width
。根据我使用Facebook API的经验,显式请求字段往往是一种更可靠的方式。
- AngularJS+Firebase上传个人资料图片
- 显示脸书好友个人资料图片时出现问题
- 如何在ionic中弹出个人资料图片
- JS:根据页面URL获取图片
- Javascript-使用Facebook登录,显示用户's成功登录后的个人资料图片
- Javascript-获取一张用户的随机个人资料图片'的朋友在脸书上
- 推特小部件_bigger个人资料图片
- 如何使用JavaScript SDK更改Facebook个人资料图片并按时更改其背面
- 钛加载Facebook个人资料图片集成不起作用
- 在 Twitter API 版本 1.1 中拉取 Twitter 个人资料图片
- 如何获取电子邮件地址的Google+个人资料图片
- 如何在Meteor应用程序中显示facebook好友数量+个人资料图片
- 链接到网站上的当前Twitter个人资料图片和用户名
- Facebook Graph API-在进行身份验证之前获取个人资料图片
- 无法让用户在注册过程中上传个人资料图片(Parse.com/JS SDK)
- 直接从url下载图片
- 使用Javascript上传个人资料图片
- 使用Web Camera拍摄个人资料图片并在画布中显示图片
- 使用谷歌登录,获取大型个人资料图片
- 检索Facebook个人资料图片的URL