【问题标题】:Meteor requestPermissions流星请求权限
【发布时间】:2013-09-14 16:46:07
【问题描述】:

大家好,其实我有两个问题。

1.Im tying to get user info here is a list of what i want (using facebook API): user_likes、friends_about_me、user_birthday、电子邮件、user_location、user_work_history、read_friendlists、friends_groups、user_groups

这是我的代码:

Template.user_loggedout.events({ 
    "click #fb":function(e,tmp){
      Meteor.loginWithFacebook({
        requestPermissions : 
        ['user_likes',
        'friends_about_me',
        'user_birthday',
        'email',
        'user_location',
        'user_work_history',
        'read_friendlists',
        'friends_groups',
        'user_groups']
      },function (err){
         if(err){
          console.log("error when login with facebook " + err);
        } else {
          console.log("login with facebook succeeded");
        }
      });
    },
})

但我最终创建了一个仅包含一些字段的用户对象(来自 mongoDB 的用户 JSON 对象,我在某些字段中插入“xxx”只是为了安全):

{
    "createdAt" : 1378842117154,
    "_id" : "mW7urf5yZPCm6HhNK",
    "services" : {
        "facebook" : {
            "accessToken" : "xxxx",
            "expiresAt" : 1383945305007,
            "id" : "xxxxxx",
            "email" : "xxxx",
            "name" : "Boaz",
            "first_name" : "Boaz",
            "last_name" : "xxx",
            "link" : "https://www.facebook.com/xxxx",
            "username" : "boazmier",
            "gender" : "male",
            "locale" : "he_IL"
        },
        "resume" : {
            "loginTokens" : [
                {
                    "token" : "TcLnp9GSbDasNZNCj",
                    "when" : 1378842117154
                }
            ]
        }
    },
    "profile" : {
        "name" : "Boaz xxxx"
    }
}

很明显,您可以看到没有 friends_list、user_birthday 等的记录。

第二个问题: 与 github 相同 - 我要求这个:用户、public_repo、avatar_url、gist 但最终得到:

{
    "createdAt" : 1378843359664,
    "_id" : "pJGwTepYe2Ps7hhnS",
    "services" : {
        "github" : {
            "id" : xxxx,
            "accessToken" : "xxxxx",
            "email" : "xxxxx",
            "username" : "boazhoch"
        },
        "resume" : {
            "loginTokens" : [
                {
                    "token" : "hbNLcuC85MKwBJBfb",
                    "when" : 1378843359664
                }
            ]
        }
    },
    "profile" : {
        "name" : "xxxx"
    }
}

所以我最终没有头像,但是当我将服务器上的代码更改为:

Accounts.onCreateUser(function(options,user){
    var accessToken = user.services.github.accessToken,result,profile;

    result = Meteor.http.get("https://api.github.com/user", {
        params: {
            access_token: accessToken
        }
    });

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

    profile = _.pick(result.data,
        "login",
        "name",
        "avatar_url",
        "url",
        "company",
        "blog",
        "location",
        "email",
        "bio",
        "html_url");

    user.profile = profile;

    return user;
});

我的用户对象得到了 avatar_url 为什么会这样?我知道流星与 Account.createUser 一起发布,并通过 onCreateUser 覆盖它,但是,requestPermissions 的结果是什么?我也只能有一个 Account.onCreateUser 函数,那么如何让这个函数从每个服务请求不同的数据呢? (我想包括 facebook、google、github、twitter 和 meetup)

【问题讨论】:

  • 您是对的,您请求的许多字段在登录时没有被 Meteor 保存在那里。你找到解决办法了吗?

标签: javascript facebook-graph-api meteor github-api user-permissions


【解决方案1】:

您希望在客户端提供给具有 JS 技能的任何人使用的数据吗?如果是这样,在将内容保存到用户记录时:最简单的方法是将任何新信息添加到配置文件对象中,当来自 facebook 时,可能会在 facebook 对象下分组。配置文件对象已全部发布给客户端。 http://docs.meteor.com/#meteor_user

user.profile.prefs.color = 'red'

为了保密,当您发现不应发送给客户端的内容时,请从服务器上的例程中写入和读取它们。见

Meteor.call()

您可以找到有关如何在用户记录中从服务器到客户端并返回的代码,您实际上是在客户端发布更多数据。除非有配置文件对象不足的原因,否则我不会担心。

【讨论】:

    猜你喜欢
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    相关资源
    最近更新 更多