具有多策略注册的用户表的模式

时间:2013-11-14 17:44:38

标签: javascript node.js mongodb express passport.js

在一个项目上工作时遇到存储不同护照策略(本地,脸书,推特)的用户信息的问题。 在开始时,UserSchema有这样的表情:

    User = mongoose.Schema(
    {
        "email" : { type : String , lowercase: true , trim : true , unique : true } ,
        "providerId" : { type : String } ,
        "providerName" : { type : String } ,
        "hashedPassword" : { type : String } ,
        "salt" : { type : String } ,
        "strategy" : { type : String } ,
        "created" : { type : Date , default : new Date().valueOf() } ,
        "lastConnected" : { type : Date , default : new Date().valueOf() } ,
        "accessToken" : { type : String } , 
        "securityToken" : { type : String , default : "" } ,
        "roles" : [ { type : String } ]
    }
);

但是,独特的电子邮件会给电子邮件带来问题,因为有两个使用Twitter状态的用户会收到空电子邮件,这会导致错误。

我认为不会使电子邮件变得独一无二,但这会带来很多(从第一眼看)问题。 我看到的一个解决方案是为每个策略制定不同的模式,但这是非常难以维护的。

还有其他方法可以解决这个问题。什么是最佳实践?

P.S。我发誓我用谷歌搜索但没有找到任何解决方案

1 个答案:

答案 0 :(得分:1)

您似乎希望能够说出unique:true并指定allowNulls。现在看来这似乎是可能的,你可以在这里看到:https://stackoverflow.com/a/9693138/1935918