Подтвердить что ты не робот

Как запросить изображение пользователя Facebook через Meteor accounts-facebook?

Я пытаюсь получить изображение профиля пользователя, прошедшего аутентификацию, для использования в приложении Meteor. Я пробовал следующие

Meteor.publish("facebook_avatar_url", function() {
    return Meteor.users.find({_id: this.userId}, {fields: {
        'services.facebook.id': 1,
        'services.facebook.name': 1,
        'services.facebook.gender': 1,
        'services.facebook.picture': 1,
        'services.facebook.picture.data': 1,
        'services.facebook.picture.data.url': 1
    }});
});

и он возвращает только идентификатор, имя и пол. Кажется, это то, что я хочу, и рекомендуемое решение. Единственная проблема заключается в том, что в отношении изображения пользователя не возвращаются данные.

Я попытался добавить следующее к server/server.js по предложению некоторых других сообщений, но он a), похоже, не является рекомендуемым подходом, и б), похоже, ничего не делает. Таким образом, это, кажется, тупик, но кто-то там, кажется, думает, что его можно использовать, чтобы загрузить изображение профиля.

var getFbPicture;

Accounts.loginServiceConfiguration.remove({
    service: "facebook"
});


Accounts.onCreateUser(function(options, user) {
    if (options.profile) {
        options.profile.picture = getFbPicture(user.services.facebook.accessToken);
        user.profile = options.profile;
    }
    return user;
});

getFbPicture = function(accessToken) {
    var result;
    result = Meteor.http.get("https://graph.facebook.com/me", {
        params: {
            access_token: accessToken,
            fields: 'picture'
        }
    });
    if (result.error) {
        throw result.error;
    }
    return result.data.picture.data.url;
};

Итак, я не уверен, в каком направлении идти в этот момент. Это что-то, что требует прав, установленных в API графиков Facebook? Или в приложении Facebook? У меня синтаксис неправильный в функции публикации? Нужно ли мне пересмотреть функцию onCreateUser?

4b9b3361

Ответ 1

Используйте это вместо этого, вам не нужен токен доступа или что-то особенное, чтобы получить их изображение профиля, просто их идентификатор пользователя facebook.

Accounts.onCreateUser(function(options, user) {
    if (options.profile) {
        options.profile.picture = "http://graph.facebook.com/" + user.services.facebook.id + "/picture/?type=large";
        user.profile = options.profile;
    }
    return user;
});

Ответ 2

если вы хотите получить изображение для facebook

Accounts.onCreateUser(function(options, user) {
    if (typeof(user.services.facebook) != "undefined") {
        user.services.facebook.picture = "http://graph.facebook.com/" + user.services.facebook.id + "/picture/?type=large";
    }
    return user;
});

вы можете добавить эту вспомогательную функцию

UI.registerHelper("getImageUser", function (userId) {
    var user= Meteor.users.findOne(userId);
    if (user.services)
    {
        if (user.services.facebook)
            return user.services.facebook.picture;
        if (user.services.twitter)
            return user.services.twitter.profile_image_url;
        if (user.services.google)
            return user.services.google.picture;
    }
    else
    {
        return "images/withOutPhoto.png";
    }
});

в вашем html

<img src="{{getImageUser this._id}}" alt="...">