[英]Passport.js Render error 401 with failureRedirect
i am using passport.js local strategy for both signup and login curently without flashing errors when i try to provide correct data to any one it pass data and move to successRedirect /home
while on any type of wrong data or unregistered data in login case or duplicated data in signup case it goes to failuerRedirect /login
but rather rending that view its shows erorr 401 with a text Unauthorized
当我尝试向传递数据的任何人提供正确的数据并移至successRedirect
/home
时,如果出现任何类型的错误数据或未登录的数据,我都会在登录和登录时使用passport.js本地策略进行当前登录和登录,而不会出现闪烁错误在注册的情况下重复的数据将转到failuerRedirect /login
,而是将其视图erorr 401显示为Unauthorized
的文本
following is my code 以下是我的代码
Passport.js file Passport.js文件
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);
});
}));
User Model 用户模型
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;
and Routes 和路线
/* 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
}));
You misspelled some words in your routes, check out the code below: 您在路线中拼错了一些单词,请查看以下代码:
/* 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
}));
最近我在本地护照上工作,我已经过去了git url,我在您的代码中找不到错误https://github.com/sourabhkum/expressapp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.