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

Authentication 使用Accounts.onCreateUser为loginWithMeetup修改user.profile,authentication,meteor,meteor-accounts,meetup,Authentication,Meteor,Meteor Accounts,Meetup,当用户使用Meetup登录包创建帐户时,我希望获得更多的值,例如用户的全名和其配置文件图片的URL,然后将它们存储在user.profile中。目前,我正在检查服务是否为“meetup”,执行以下GET请求并尝试将其存储在user.profile中 if (service == "meetup") { var accessToken = user.services.meetup.accessToken; var request = Meteor.http.get

当用户使用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下


非常感谢:)

请尝试将您的代码更改为(仅使用上所述的API):

if(服务==“meetup”){
var accessToken=user.services.meetup.accessToken;
试一试{
var result=HTTP.get('https://api.meetup.com/2/profiles',{
参数:{
访问令牌:访问令牌
},
标题:{“用户代理”:“Meteor/1.0”}
});
检查(结果、数据、对象);
}捕获(错误){
投掷误差;
}
变量配置文件=uu.pick(result.data,
“姓名”,
“照片地址”
);
user.profile=profile;
返回用户;
}

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


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

点击此处。谢谢你的其他答案!我确实设法让代码正常工作了。我尝试了一些不同的方法,因此我没有找出问题的原因,但我确信部分原因是我使用了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;

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


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

如果您通过一些外部服务登录,他们中的大多数人都不会给您用户名,如果没有此注册将无法成功,请尝试addin user.username~尝试sbking的建议。据我所知,没有
Meteor.http.get
(只有
http.get
),这就是代码无法工作的原因。这就是代码的问题之一!我终于让它工作了,我把我的代码贴在下面。谢谢你的帮助!有没有一种方法可以通过关键字来查找组?嗯,我似乎找不到一种方法来搜索具有关键字本身的组,但您可以根据主题(组的主题)进行查询。问题是,每个查询只允许提交一个主题。有关更多信息,请参阅