使用Accounts.onCreateUser为loginWithMeetup修改user.profile

时间:2015-01-03 22:10:32

标签: authentication meteor meteor-accounts meetup

当用户使用Meetup登录包创建帐户时,我想获得更多的值,例如用户的全名和他们的个人资料图片的URL,然后将它们存储在user.profile中。目前,我正在检查服务是否为#34; 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")下的代码,我可以创建一个帐户,但没有我需要的字段,所以我知道问题就在这里。如何获取用户的全名和个人资料图片网址并将其存储在user.profile下?

非常感谢提前:)

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

我对您问题的Meteor特定部分了解不多,但您想要的信息可能在get member API调用中,而不是在配置文件API调用中。您可能希望获取https://api.meetup.com/2/member/self以获取有关当前已验证用户的信息。

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

答案 2 :(得分:0)

OP在这里。谢谢你的其他答案!我确实设法让代码工作。我尝试了一些不同的东西,所以我没有找出导致问题的原因,但我确信部分原因是我使用的是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;

    }

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

我希望这有助于任何有类似问题的人。