javascript - 具有多策略 sigup 的用户表架构

标签 javascript node.js mongodb express passport.js

在从事一个项目时,面临着存储不同 Passport 策略(本地、facebook、twitter)的用户信息的问题。 一开始我的 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 策略的两个用户将拥有空电子邮件,这会导致错误。

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

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

附注我发誓我用谷歌搜索但没有找到任何解决方案

最佳答案

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

关于javascript - 具有多策略 sigup 的用户表架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19984656/

相关文章:

javascript - 如何在 Node.js 中复制数组的元素?

ruby-on-rails - Mongoid has_many/belongs_to 有 'undefined method' 错误

javascript - 使用 D3 (v5) 应用多个过渡

php - Facebook 连接 'next' 错误

javascript - 如何添加下一个上一个按钮以更改 javascript 中的选项卡内容?

node.js - Mongoose 中的中间件与副本集的中间件,用于发送电子邮件/短信

python - 仅限制带地理标记的推文流向 mongodb

javascript - console.log(array) 返回空,但 console.log(array.length) 不返回 0

node.js - rabbitmq队列中消息过多,队列不会过期

javascript - Async/await 是如何工作的,为什么在这里不起作用