2017-11-29 1 views
0

Ich benutze die lokale Passport.js-Strategie sowohl für die Anmeldung als auch für die Anmeldung ohne blinkende Fehler, wenn ich versuche, die richtigen Daten zu liefern und die Daten an successRedirect /home weiterzugeben von falschen Daten oder nicht eingetragene Daten in Login Fall oder dupliziert Daten in der Registrierung Fall geht es /login sondern Zerreißen failuerRedirect, die seine Shows 401 mit einem Text erorr sieht UnauthorizedPassport.js Renderfehler 401 mit failureRedirect

folgende ist mein Code

Passport.js Datei

var passport = require('passport'); 
var User = require('../models/user'); 
var LocalStrategy = require('passport-local').Strategy; 

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('User.signup', new LocalStrategy({ 
    usernameField : 'email', 
    passwordField: 'password', 
    passReqToCallback : true 
}, function (req, email, password, done) { 
     var FirstName = req.body.Firstname; 
     var LastName = req.body.Lastname; 
     var email = req.body.email; 
     var RollNo = req.body.rollno; 
     var Gender = req.body.Gender; 
     var password = req.body.password; 
    User.findOne({'email': email}, function (err, user) { 
     if (err) { 
      return done(err); 
     } 
     if (user) { 
      return done(null, false, {signupMessage: 'Email is already in use.'}); 
     } 
     var newUser = new User(); 
     newUser.First_Name = FirstName; 
     newUser.Last_Name = LastName; 
     newUser.email = email; 
     newUser.Roll_No = RollNo; 
     newUser.Gender = Gender; 
     newUser.password = newUser.encryptPassword(password); 
     newUser.save(function(err, result) { 
      if (err) { 
       return done(err); 
      } 
      return done(null, newUser); 
     }); 
    }); 
})); 

passport.use('user.login' , new LocalStrategy({ 
    usernameField : 'email', 
    passwordField : 'password', 
    passReqToCallback : true 
}, function (req , email , password , done){ 
    User.findOne({'email' : email} ,function(err , user) { 
     if(err){ 
        return done(err) 
       } 
     if(!user){ 
        return done(null , false) 
       } 
     if(!user.validPassword(password)){ 
        return done(null , false) 
       } 

     return done(null , user); 
    }); 
})); 

Benutzermodell

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var bcrypt = require('bcrypt-nodejs'); 

const UserSchema = new Schema({ 
    First_Name : { type : String , required : true , minLength: 2 }, 
    Last_Name : { type : String , required : true , minLength : 2}, 
    email : { type : Schema.Types.Mixed, unique : true, required : true, dropDups: true }, 
    Roll_No : { type : Schema.Types.Mixed, unique : true, required : true, dropDups: true }, 
    Gender : String , 
    password : { type : Schema.Types.Mixed, required : true} 
},{collection : 'Users'}); 

UserSchema.methods.encryptPassword = function(password) { 
    return bcrypt.hashSync(password, bcrypt.genSaltSync(5), null); 
}; 

UserSchema.methods.validPassword = function(password) { 
    return bcrypt.compareSync(password, this.password); 
} 
var User = mongoose.model('User' , UserSchema); 

module.exports = User; 

und Routen

/* Get Login */ 

router.get('/login', function(req, res, next) { 
    res.render('login'); 
}); 

/* Post Login */ 

router.post('/login', passport.authenticate('user.login', { 
    successRedirect : '/home', 
    failuerRedirect : '/login', 
    failuerFlash : true 
})); 


/* Get SignUp */ 

router.get('/signup', function(req, res, next) { 
    res.render('signup'); 
}); 

/* regester New user */ 

router.post('/signup', passport.authenticate('User.signup' , { 
    successRedirect : '/home', 
    failuerRedirect : '/signup', 
    failuerFlash: true 
})); 

Antwort

1

finden Sie haben einige Wörter auf Ihren Routen falsch geschrieben. Überprüfen Sie den folgenden Code:

/* Get Login */ 

router.get('/login', function(req, res, next) { 
    res.render('login'); 
}); 

/* Post Login */ 

router.post('/login', passport.authenticate('user.login', { 
    successRedirect : '/home', 
    failureRedirect : '/login', 
    failureFlash : true 
})); 


/* Get SignUp */ 

router.get('/signup', function(req, res, next) { 
    res.render('signup'); 
}); 

/* register New user */ 

router.post('/signup', passport.authenticate('User.signup' , { 
    successRedirect : '/home', 
    failureRedirect : '/signup', 
    failureFlash: true 
}));