Javascript 如何通过Useraccounts包从第三方社交登录中提取用户名?

Javascript 如何通过Useraccounts包从第三方社交登录中提取用户名?,javascript,meteor,meteor-accounts,Javascript,Meteor,Meteor Accounts,我正在使用Meteor的Useraccounts包 我已经配置好了,用户名/电子邮件+密码登录正在工作,用户名在登录时显示(用户需要在注册时输入用户名) 但是,当我单击社交登录按钮登录时,我已登录,但没有注册用户名。所以无论我做什么,日志用户名都不会显示任何内容,即没有用户名 我按照以下链接进行配置: 我在lib/config.js中有以下内容 ServiceConfiguration.configurations.update( { "service": "facebook" }

我正在使用Meteor的Useraccounts包

我已经配置好了,用户名/电子邮件+密码登录正在工作,用户名在登录时显示(用户需要在注册时输入用户名)

但是,当我单击社交登录按钮登录时,我已登录,但没有注册用户名。所以无论我做什么,日志用户名都不会显示任何内容,即没有用户名

我按照以下链接进行配置:

我在lib/config.js中有以下内容

ServiceConfiguration.configurations.update(
      { "service": "facebook" },
      {
        $set: {
          "appId": "XXXXXXXXXXXXXXX",
          "secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        }
      },
      { upsert: true }
    );
下面是修改电子邮件/密码登录的步骤

var pwd = 
AccountsTemplates.removeField('password');
AccountsTemplates.removeField('email');
AccountsTemplates.addFields([
  {
    _id: "username",
    type: "text",
    required: true,
    displayName: "username",
    minLength: 5,
    errStr: 'error.minChar'
  },
我可能错过了它大,但我没有看到任何讨论提取用户名从第三方登录。有人知道如何进一步配置吗?例如,如果Facebook或Twitter用户名是ABC,我希望ABC在第三方社交登录时在应用程序中反映为用户名

更新

Accounts.onCreateUser(function(options, user){
  if(user.services){

    if(user.services.google) {
      user.username = user.services.google.username;
    } 
    else if(user.services.twitter) {
      user.username = user.services.twitter.username;
    } 
    else if(user.services.facebook) {
      user.username = user.services.facebook.username;
    }
    else if(user.services.github) {
      user.username = user.services.github.username;
    }
  }
  if(options.profile){
    user.profile = options.profile;
  }
  return user;
});

您可以在用户创建时注册服务器端钩子,并强制用户名为您想要的任何用户名,包括来自第三方服务的用户名


但是请注意,这不会强制实现用户名的唯一性,因为facebook上的两个人显然可以共享同一个名称,因此如果这是应用程序中的问题,您必须自己解决。

谢谢您的回复。我是否需要在lib/config.js文件中将上述内容与其余内容放在一起?或者加入server/config.js,因为您提到了它是一个服务器钩子?至于用户名的唯一性,这是首选,但必须找出如何实现。因为它是一个仅用于服务器的API,最好将其放在
server
目录下。明白了,我问了,因为useraccounts不是ui帐户的原始包,我不确定是否有冲突。您是否知道帐户条目是否比Useraccounts更易于处理/配置?这些包充当Meteor core accounts API的包装器,但您仍然可以连接标准API。就我个人而言,我在我的一些项目中使用了
useraccounts
,但这是一个有争议的话题。广受欢迎的望远镜开源项目使用
useraccounts
,你可以在这里查看repo:用户管理逻辑在专用的
望远镜用户
包中处理。
Accounts.onCreateUser(function(options, user){
  if(user.services){
    if(user.services.google){
      user.username = user.services.google.name;
    }
    else if(user.services.twitter){
      [..]
    }
    [...]
  }
  //
  if(options.profile){
    user.profile = options.profile;
  }
  return user;
});