我是一个完全的新手,我一直在摆弄 Meteor 1.0 示例待办事项列表应用程序以将 google oauth 连接到它。
当我这样做时,页面不再正确呈现,因为 {{用户名}} 根本没有设置。
https://docs.meteor.com/#/full/meteor_users说“用户名:标识用户的唯一字符串。”但是 oauth 的东西不会为您创建一个。
Connect service to existing meteor account谈论将现有帐户链接到另一个服务,但在这种情况下,我只想使用外部服务。
https://stackoverflow.com/questions/25182903/meteor-facebook-registration使用 onCreateUser() 手动设置
user.username = user.services.facebook.name
但这不能跨服务移植,也不能保证唯一性。
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,
}
}
}
处理这个问题的正确方法是什么?
最佳答案
这就是我用 facebook 和 google 自己做的
Accounts.onCreateUser(function (options, user) {
if (options && options.profile) {
user.profile = options.profile;
}
if (user.services) {
var service = _.pairs(user.services)[0];
var serviceName = service[0];
var serviceData = service[1];
console.log("serviceName", serviceName)
if (serviceName == "facebook") {
user.emails = [
{"address": serviceData.email, "verified": true}
];
user.profile = {"first_name": serviceData.first_name, "last_name": serviceData.last_name, "avatar": getFbPicture(serviceData.id)};
}
else if (serviceName == "google") {
user.emails = [
{"address": serviceData.email, "verified": true}
];
user.profile = {"first_name": serviceData.given_name, "last_name": serviceData.family_name, "avatar": getGooglePicture(serviceData.id)};
}
}
console.log("user created :", user)
return user;
});
我不使用
username
但我使用电子邮件是为了确保它是独一无二的。在那之后我可以允许用户设置他的
username
或 display name
像 Stackoverflow 或其他服务一样。但是,您可以使用 邮箱 如
username
并再次让用户稍后更改它。
关于通过外部服务的 meteor 帐户不设置 user.username,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26799150/