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

标签 meteor

我是一个完全的新手,我一直在摆弄 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但我使用电子邮件是为了确保它是独一无二的。在那之后
我可以允许用户设置他的 usernamedisplay name像 Stackoverflow 或其他服务一样。

但是,您可以使用 邮箱 username并再次让用户稍后更改它。

关于通过外部服务的 meteor 帐户不设置 user.username,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26799150/

相关文章:

mongodb - Meteor 集合不会在启动时自动创建,并且自动表单不会发布到 mongo db

meteor 自动形成访问嵌套属性

javascript - 客户端从服务器方法接收数据

javascript - JavaScript 中的 jQuery.tokenInput.js 脚本不起作用

meteor - 如何在Meteor.js中仅显式加载特定的(不是全部)css文件

mongodb - Meteor + MongoDB - 显示帖子列表及其评论数

Meteor 卡在下载meteor-tool@1.3.2_4

mongodb - 如何使用 Blaze Meteor 显示集合中的所有内容

javascript - template.data._id 在 Meteor 中做什么?

javascript - meteor 数据模型