如何正确地将外部登录服务合并到Meteor?

时间:2014-03-03 19:51:17

标签: meteor

我想通过Meteor添加Facebook,Twitter和Google登录服务。这样做似乎很容易,但我丢失的地方是自定义用户文档,以便它与标准用户帐户一致。例如,使用FB,它将所有配置文件字段存储在服务中:

我知道在将用户文档保存到数据库之前,我应该使用Accounts.onCreateUser()来规范化用户文档,但我缺少一个很好的例子。我在这里看到了github:

Meteor login with external service: how to get profile information?

但是我很难理解它。例如,如果我有Facebook,Twitter和Google,在我的服务器端onCreateUser函数中:

  1. 如何让所有服务都遵循此布局:

    {
    
        "_id" : "RERDDXHyhob8Ypqht",
        "createdAt" : ISODate("2014-03-03T18:47:57.455Z"),
        "emails" : [
                {
                        "address" : "persons@gmail.com",
                        "verified" : false
                }
        ],
        "profile" : {
                "firstname" : "John",
                "lastname" : "Doe",
                "user_status" : "new user"
        },
        "services" : {
                "email" : {
                        "verificationTokens" : [
                                {
                                        "token" : "z8yAhnpJotpiBWqh3",
                                        "address" : "some@email.com",
                                        "when" : ISODate("2014-03-03T18:47:57.475Z")
                                }
                        ]
                },
                "password" : {
                        "reset" : {
                                "token" : "Q48WBZvx9m4onMtky",
                                "email" : "some@email.com",
                                "when" : ISODate("2014-03-03T18:55:40.955Z")
                        },
                        "srp" : {
                                "identity" : "asdfadsfadsfasdf",
                                "salt" : "adsfadsfasdfasdf",
                                "verifier" : "asdfadsfadsfasdff8e6c"
                        }
                },
                "resume" : {
                        "loginTokens" : [ ]
                }
        },
        "username" : "some@email.com"
    

    }

  2. 所以这里有一些虚拟逻辑来解释我正在尝试做什么:

    Accounts.onCreateUser(function (options, user) {
        // If using email/standard account creation use default hook.
             if (options.profile) {
             user.profile = options.profile;
             user.profile.user_status = "new user";
           }
           return user;
    
        // We detect Facebook being used for authentication...
           Grab facebook stuff and organize it so that it follows my above example. Like, all those profile fields embedded in services.facebook is fine, but can I copy them so that I can put profile: { firstname: firstnamefromfacebook, lastname: lastnamefromfacebook, etc.
    
        // We detect Google, or twitter, and you get where I'm going with this.
    
    
    });
    

    我在这里看了一篇有趣的文章:

    http://ondrej-kvasnovsky.blogspot.com/2013/07/meteor-how-to-login-with-github-account.html

    它看起来有点笨重,但可能是必要的。我还想在我的系统中加入同样类型的逻辑,这样如果它发现用户已经存在,它就会正确处理它。在这种情况下,还会出现什么安全问题?是否需要先进行电子邮件验证?我想Facebook会通过验证他们的电子邮件来解决这个问题吗?

    我想阻止人们拥有两个帐户......

    一个。约翰通过填写表格来创建一个帐户。 湾后来约翰用Facebook登录

    我想找出合并这两个帐户的最佳方式。

    我认为这是我在身份验证系统上的最后一个绊脚石。也许我没有找到的很好的例子会很精彩。或者如果你已经这样做了,如果你可以分享,那么我们其他人新手可以抢占先机。

    非常感谢。

0 个答案:

没有答案