1

皆さん、実際に 2 つの質問があります。

1.ユーザー情報を取得しようとしているのは、(Facebook API を使用して) 必要な情報のリストです: user_likes、friends_about_me、user_birthday、email、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 などのレコードがないことがわかります。

2 番目の質問: github と同じこと - 私はこれを要求します: user, 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 関数は 1 つしか持てないので、この関数が各サービスから異なるデータを要求するようにするにはどうすればよいですか? (facebook、google、github、twitter、meetup を含めたい)

4

1 に答える 1