Johnsoct
10/18/2017 - 9:17 PM

DEFAULT user schema for social authentication

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);