1

当用户使用 Meetup 登录包创建帐户时,我想获取更多值,例如用户的全名和他们的个人资料图片的 URL,然后将它们存储在 user.profile 中。目前,我正在检查服务是否为“meetup”,执行以下 GET 请求并尝试将其存储在 user.profile 中。

if (service == "meetup") {
        var accessToken = user.services.meetup.accessToken;

        var request = Meteor.http.get('https://api.meetup.com/2/profiles',{
            params : {
                access_token : accessToken
            },
            headers: {"User-Agent": "Meteor/1.0"}
        });

        if(result.error){
            throw result.error;
        }

        profile = _.pick(request.results,
            'name',
            'photo_url'
        );

        user.profile = profile;

        return user;

    }

但是,当我尝试创建帐户时出现错误。请注意,如果我要删除代码,if (service == "meetup")尽管没有我需要的字段,我可以创建一个帐户,所以我知道问题出在此处。如何获取用户的全名和头像 URL 并将它们存储在 user.profile 下?

提前谢谢了 :)

4

3 回答 3

1

尝试将您的代码更改为此(仅使用http://docs.meteor.com上描述的 API ):

if (service === "meetup") {
    var accessToken = user.services.meetup.accessToken;

    try {
        var result = HTTP.get('https://api.meetup.com/2/profiles',{
            params : {
                access_token : accessToken
            },
            headers: {"User-Agent": "Meteor/1.0"}
        });

        check(result.data, Object);

    } catch (error) {
        throw error;
    }

    var profile = _.pick(result.data,
        'name',
        'photo_url'
    );

    user.profile = profile;
    return user;
}
于 2015-01-03T23:39:49.963 回答
0

我对您问题中特定于 Meteor 的部分了解不多,但您想要的信息可能在get member API 调用中,而不是在 profile API 调用中。您可能想要获取https://api.meetup.com/2/member/self有关当前经过身份验证的用户的信息。

API 调用的结果将包括成员的姓名以及photo带有个人资料照片 URL 的对象。

于 2015-01-06T18:15:40.520 回答
0

在这里。谢谢你的其他答案!我确实设法让代码正常工作。我尝试了一些不同的方法,所以我没有找出导致问题的原因,但我确信部分原因是我使用 Meteor.http.get 而不是 HTTP.get(正如@sbking 和 @fuzzybabybunny 建议的那样)和我在请求中使用 /2/profile/ 而不是 /2/member (谢谢@mlc)。

最后,我决定使用我创建的空 Meetup 帐户中的 API 密钥,而不是像以前那样使用访问令牌。

这是代码:

if (service == "meetup") {
        var meetupId = user.services.meetup.id;
        var target = 'https://api.meetup.com/2/member/' + meetupId + '?key=' + MEETUP_API_KEY + '&signed=true';

        var result = HTTP.get(target, {
            params: {
                format: 'json'
            }
        });

        var userProperties = result.data;

        options.profile = {
            'name': userProperties.name,
            'link': userProperties.link,
            'bio': userProperties.bio,
            'picture': userProperties.photo.photo_link,
            'id': meetupId
        };

        user.profile = options.profile;

        return user;

    }

上面的代码在存储它之前不会验证返回的数据,它将以其最终形式。

我希望这可以帮助任何有类似问题的人。

于 2015-01-07T22:00:30.693 回答