Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- passport.use('local-signup', new LocalStrategy({
- usernameField: 'email',
- passwordField: 'password',
- //are there other options?
- //emailField did not seem to do anything
- passReqToCallback: true // allows us to pass in the req from our route (lets us check if a user is logged in or not)
- },
- function(req, email, password, done) {
- //check if email not already in database
- //create new user using "email" and "password"
- //I want an additional parameter here "name"
- }));
- signup: function (req, res) {
- User
- .findOne({
- or: [{username: req.param('username')}, {email: req.param('email')}]
- })
- .then(function(user) {
- if (user) return {message: 'User already exists'};
- return User.create(req.allParams());
- })
- .then(res.ok)
- .catch(res.negotiate);
- }
- var passport = require('passport');
- var LocalStrategy = require('passport-local').Strategy;
- var LOCAL_STRATEGY_CONFIG = {
- usernameField: 'email',
- passwordField: 'password',
- session: false,
- passReqToCallback: true
- };
- function _onLocalStrategyAuth(req, email, password, next) {
- User
- .findOne(or: [{email: email}, {username: email}])
- .then(function (user) {
- if (!user) return next(null, null, {
- code: 'E_USER_NOT_FOUND',
- message: email + ' is not found',
- status: 401
- });
- if (!HashService.bcrypt.compareSync(password, user.password)) return next(null, null, {
- code: 'E_WRONG_PASSWORD',
- message: 'Password is wrong',
- status: 401
- });
- return next(null, user, {});
- })
- .catch(next);
- }
- passport.use(new LocalStrategy(LOCAL_STRATEGY_CONFIG), _onLocalStrategyAuth));
- signin: function(req, res) {
- passport.authenticate('local', function(error, user, info) {
- if (error || !user) return res.negotiate(Object.assign(error, info));
- return res.ok(user);
- })(req, res);
- }
- var passport = require('passport'),
- LocalStrategy = require('passport-local').Strategy;
- passport.serializeUser(function(user, done) {
- // the values returned here will be used to deserializeUser
- // this can be use for further logins
- done(null, {username: user.username, _id: user.id, role: user.role});
- });
- passport.deserializeUser(function(user, done) {
- done(null, user);
- });
- passport.use(new LocalStrategy(function(username, password, done){
- odm.User.findOne({username: username, authType: 'direct'}, function(err, user){
- if(err){
- return done(err, false);
- }
- if(!user){
- return done(null, false);
- }
- if(user.role === 'new'){
- console.log('can not use new user!');
- return done('user not activated yet, please contact admin', false);
- }
- user.comparePassword(password,function(err, isMatch){
- if(err){
- return done(err, false);
- }
- if(isMatch){
- return done(null, user);//{username: username});
- }
- return done(null, false);
- });
- });
- }));
- app.post('/login', function(req, res, next){
- passport.authenticate('local', {
- failureRedirect: '/logout?status=login failed'
- }, function(err, user, info){
- if(err){
- return next(err);
- }
- if(!user){
- return res.redirect('/login');
- }
- req.logIn(user, function(err){
- if (req.body.rememberme) {
- req.session.cookie.maxAge = 30*24*60*60*1000 ;//Rememeber 'me' for 30 days
- } else {
- req.session.cookie.expires = false;
- }
- var redirect = req.param('redirect') || '/index';
- res.redirect(redirect);
- });
- }
- )(req, res, next);
- }
- );
- app.post('/register',function(req, res){
- var user = new odm.User({username: req.body.username, password: req.body.password, email: req.body.email, authType: 'direct'});
- user.save(function(err, user){
- if(err){
- console.log('registration err: ' , err);
- } else {
- res.redirect('/list');
- }
- });
- });
- var bcrypt = require('bcrypt-nodejs');
- // --------------------- User ------------------------------------------ //
- var userSchema = new Schema({
- name: String,
- email: String,
- username: {type: String, required: true, unique: true},
- password: String,
- role: {type: String, required: true, enum: ['new', 'admin', 'user'], default: 'new'},
- authType: {type: String, enum: ['google', 'direct'], required: true}
- });
- userSchema.pre('save', function (next) {
- var user = this;
- if (!user.isModified('password')) return next();
- console.log('making hash...........');
- bcrypt.genSalt(SALT_WORK_FACTOR, function (err, salt) {
- if (err) return next(err);
- bcrypt.hash(user.password, salt, null, function (err, hash) {
- if (err) return next(err);
- user.password = hash;
- next();
- });
- });
- });
- userSchema.methods.comparePassword = function (candidatePassword, cb) {
- bcrypt.compare(candidatePassword, this.password, function (err, isMatch) {
- if (err) return cb(err);
- cb(null, isMatch);
- });
- };
- var localStrategy = require('passport-local').Strategy;
- var User = require('../public/models/user');
- module.exports = function(passport){
- passport.serializeUser(function(user, done){
- done(null, user.id);
- });
- passport.deserializeUser(function(id, done){
- User.findById(id, function(err, user){
- done(err, user);
- });
- });
- passport.use('local-signup', new localStrategy({
- usernameField: 'email',
- passwordField: 'password',
- passReqToCallback: true
- },
- function(req, email, password, done){
- process.nextTick(function(){
- User.findOne({'local.enroll': email}, function(err, user){
- if(err)
- return done(err);
- if(user){
- return done(null, false, req.flash('signupmessage', 'The email already taken'));
- } else{
- var newUser = new User();
- newUser.local.enroll = email;
- newUser.local.password = newUser.generateHash(password);
- newUser.save(function(err){
- if(err)
- throw err
- return done(null, newUser);
- });
- }
- });
- });
- }));
- passport.use('local-login', new localStrategy({
- usernameField: 'email',
- passwordField: 'password',
- passReqToCallback: true
- },
- function(req, email, password, done){
- process.nextTick(function(){
- User.findOne({'local.enroll': email}, function(err, user){
- if(err)
- return done(err);
- if(!user){
- return done(null, false, req.flash('loginmessage', 'No user found'));
- }
- if(!user.validPassword(password)){
- return done(null, false, req.flash('loginmessage', 'Invalid password'));
- }
- return done(null, user);
- });
- });
- }));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement