MongoDB 用户架构设计身份验证使用(本地,google,facebook

MongoDB user schema design auth using (local, google, facebook

我希望我的用户使用本地、google 或 facebook 登录,我想知道如何构建我的用户架构以启用 google 和 facebook 身份验证,以及稍后保存数据(如电子邮件、姓名等)来自 facebook 的 return/google。这是我的架构 table:

const bcrypt = require('bcryptjs')

const userSchema = mongoose.Schema({
    name:{
        type: String,
        required : true
    },
    email:{
        type: String,
        required : true,
        unique: true,
    },
    password:{
        type: String,
        required : true,
    },
    isAdmin:{
        type: Boolean,
        required : true,
        default: false
    },
    isInfluencer:{
        type: Boolean,
        required : true,
        default: false
    },
}, {
    timestamps: true
})

userSchema.methods.matchPassword = async function (enteredPassword) {
    return await bcrypt.compare(enteredPassword, this.password)
  }

userSchema.pre('save', async function (next) {
    if (!this.isModified('password')) {
      next()
    }
  
    const salt = await bcrypt.genSalt(10)
    this.password = await bcrypt.hash(this.password, salt)
    
})

const user = mongoose.model('User', userSchema)

module.exports = user ``` 

It's my first time to implement multiple auth options and haven't found good docs on the net. Any help will be appreciated. Thanks in advance!!!

没有“神奇”的解决方案,您必须将逻辑合并到您的应用程序中,我建议您保存 3 (4) 个不同的字段 email x passwordgoogle idfacebook id.根据用户选择的身份验证方法,您将获取并保存正确的字段。

需要考虑的事项。

password:{
        type: String,
        required : true,
    },

不需要,因为 google/facebook 身份验证不需要它。

email:{
        type: String,
        required : true,
        unique: true,
    },

应该有一个 sparse: true 字段,否则 null 值将计入索引,您将从 google 身份验证 / facebook 身份验证 (除非您还打算保存他们的电子邮件,如果是这种情况,您需要在登录中添加更多逻辑以处理使用电子邮件注册的用户的“合并”,然后在使用与该电子邮件相关联的 faceook 注册后 X 次电子邮件。)