Meteor login with external service: how to get pro

2019-01-23 10:06发布

I use the Accounts-UI and Accounts-[Github/Twitter/Facebook/Google] packages which allows login with external service.

I modified Accounts.ui.config with requestPermissions, example:

Accounts.ui.config({
  requestPermissions: {
    github: ['user'],
    facebook: ['user_photos']
  }
});

But when I logged me with Github (for example), I get only my Github's name.

Same thing with others external services.

How to get more information, like the url of the profile picture?

1条回答
叛逆
2楼-- · 2019-01-23 10:27

You can use the Accounts.onCreateUser(fn) method to customize what gets stored when the user is created. Here is some sample code:

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;
});

You have to make an additional call to the service in the callback function to grab any additional attributes. Currently, there's no way that I know of to plug directly into the method that Meteor uses to get the identity attributes.

查看更多
登录 后发表回答