通过外部服务的Meteor帐户不设置user.username

Bae*_*Bae 6 meteor

我是一个完整的新手,我一直在摆弄Meteor 1.0样本待办事项列表应用程序,将谷歌oauth连接到它.

当我这样做时,页面不再正确呈现,因为{{username}}根本没有设置.

https://docs.meteor.com/#/full/meteor_users说"用户名:标识用户的唯一字符串." 但是oauth的东西并没有为你创造一个.

将服务连接到现有的meteor帐户,讨论如何将现有帐户链接到另一个服务,但在这种情况下,我只想使用外部服务.

/sf/ask/1762803241/使用onCreateUser()手动设置

user.username = user.services.facebook.name
Run Code Online (Sandbox Code Playgroud)

但这不是跨服务可移植,也不保证唯一性.

https://github.com/aldeed/meteor-collection2定义用户架构,以便用户名是必需的.

当我转储用户表(删除了一些字段)时,谷歌帐户没有用户名,并且没有字段可以自动实现该值,因为可能存在冲突.可以使用电子邮件,但我宁愿用户名不是电子邮件地址.我是否只是强制用户指定所需的用户名?

meteor:PRIMARY> db.users.find()
{
    "_id" : "YNWt2cATMsKFG7od6",
    "createdAt" : ISODate("2014-11-05T11:08:00.406Z"),
    "services" : {
        "password" : {
        },
    },
    "username" : “a_user”
}
{
    "_id" : "CyQsJqcez3kWTRHyQ",
    "createdAt" : ISODate("2014-11-05T12:09:40.139Z"),
    "profile" : {
        "name" : “Alice User”
    },
    "services" : {
        "google" : {
            "email" : “a_user@example.com",
            "family_name" : “User”,
            "gender" : “female",
            "given_name" : "Alice”,
            "id" : "1115",
            "name" : “Alice User,
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

处理这个问题的正确方法是什么?

Raj*_*d02 2

在我的应用程序中,我使用它来处理同样的问题。

username = user.services.facebook.name
user.username=generateUsername(username)

generateUsername = function(username) {
  var count;
  username = username.toLowerCase().trim().replace(" ", "");
  count = Meteor.users.find({"profile.un": username}).count();
  if (count === 0) {
    return username;
  } 
  else {
    return username + (count + 1)
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个唯一的用户名。成功注册后,您可以允许用户更改用户名并检查您的数据库是否存在。