Default user schema for having social authentication providers on an individual user.
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const validator = require('validator');
const mongodbErrorHandler = require('mongoose-mongodb-errors');
const passportLocalMongoose = require('passport-local-mongoose');
const userSchema = new mongoose.Schema({
name: {
type: String,
unique: true,
lowercase: true,
trim: true
},
email: {
type: String,
unique: true,
lowercase: true,
trim: true,
validate: [validator.isEmail, 'Invalid email address!'],
required: 'Please enter an email address!'
},
google: {
id: String,
token: String,
email: String,
name: String
},
twitter: {
id: String,
token: String,
email: String,
name: String
},
facebook: {
id: String,
token: String,
email: String,
name: String
},
resetPasswordToken: String,
resetPasswordExpires: Date,
});
// add passport-local authentication methods to schema
userSchema.plugin(passportLocalMongoose, {
usernameField: 'email'
});
// mongodbErrorHandler beautifies errors
userSchema.plugin(mongodbErrorHandler);
module.exports = mongoose.model('User', userSchema);