我是一个完整的新手,我一直在摆弄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)
处理这个问题的正确方法是什么?
在我的应用程序中,我使用它来处理同样的问题。
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)
这将创建一个唯一的用户名。成功注册后,您可以允许用户更改用户名并检查您的数据库是否存在。