NodeJS Passport身份验证-始终重定向到失败url
NodeJS Passport Authentication - always redirected to failure url
无论登录详细信息如何,我都会被重定向到失败url,控制台上没有记录任何内容,也没有显示任何错误。有什么关于为什么会发生这种情况的想法吗?
登录Jade
extends layout
block content
h1 Login
p Please Login below
form(method='post', action='/users/login',enctype='multipart/form-data')
.form-group
label Username
input.form-control(name='username', type='text', placeholder='Enter username')
.form-group
label Password
input.form-control(name='password', type='password', placeholder='Enter Password')
input.btn.btn-default(name='submit', type='submit', value='Login')
User.js
var express = require('express');
var router = express.Router();
var multer = require('multer');
var uploads = multer({ dest: './uploads' });
var passport = require('passport');
var localStrategy = require('passport-local').Strategy;
var User = require('../models/userModel');
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
router.get('/register', function(req, res, next) {
res.render('register',{ title: 'Register'})
});
router.get('/login', function(req, res, next) {
res.render('login',{ title: 'Login'})
});
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.getUserById(id, function(err, user) {
done(err, user);
});
});
passport.use(new localStrategy(
function(username, password, done){
User.getUserByUsername(username, function(err, user){
if(err) throw err;
if(!user){
console.log('Unknown user');
return done(null, false,{message:'Unkown User'});
}
User.comparePassword(password, user.password, function(err, isMatch){
if(err) throw err;
if(isMatch){ return done(null, user)}
else{
console.log('Invalid password');
return done(null, false, {message:'Invalid Password'});
}
});
});
}
));
router.post('/login', passport.authenticate('local',{failureRedirect:'/users/login',failureFlash: true }), function(req, res){
console.log('Auth Sucessful');
req.flash('sucess','Logged in');
res.redirect('/');
});
module.exports = router;
我的UserModel.js有comparePassword和getUserByUsername。
var mongoose = require('mongoose');
var bcrypt = require('bcrypt');
mongoose.connect('mongodb://localhost/nodeauth');
var db = mongoose.connection;
//Schema
var UserSchema = mongoose.Schema({
username:{
type:String,
index:true
},
password:{
type:String,
bcrypt :true,
required: true
},
email:String,
name:String,
profileImage:{
type:String
}
});
var User = module.exports = mongoose.model('User',UserSchema);
module.exports.comparePassword = function(candidatePassword, hash , callback){
bcrypt.compare(candidatePassword, hash, function(err, ismatch){
if(err) return callback(err);
callback(null, ismatch);
});
}
module.exports.getUserByUsername = function(username, callback){
var query = {username : username};
User.findOne(query, function(err, user) {
callback(err, user);
});
}
module.exports.getUserById = function(id, callback){
User.findById(id,callback);
}
module.exports.createUser = function(newUser,callback){
bcrypt.hash(newUser.password, 10, function(err, hash){
if(err) throw err;
//Set hash password
newUser.password = hash;
newUser.save(callback);
} );
}
function(username, password, done){
User.getUserByUsername(username, function(err, user){
if(err) throw err;
if(!user){
console.log('Unknown user');
return done(null, false,{message:'Unkown User'});
}
User.comparePassword(password, user.password, function(err, isMatch){
if(err) throw err;
if(isMatch){ return done(null, user)}
else{
console.log('Invalid password');
return done(null, false, {message:'Invalid Password'});
}
});
});
}
这就是你的问题应该发生的地方。自if(err) throw err;
如果存在,并且您没有出现错误,那么无论发生什么都很可能不被视为错误,所以一定是您的逻辑在某一点上失败了。
您应该测试密码是否正确返回,或者UserModel中的bcrypt比较是否正常工作。这些是我目前认为至关重要的要点。
相关文章:
- 在Chrome扩展中使用PAC文件重定向HTTPS请求似乎失败了
- 重定向表单失败
- AngularJS 重定向在 IE8 上失败
- 如何防止验证失败时锚标记在 JavaScript 中重定向
- 服务器返回重定向(302)后,iOS设备上的AJAX或XHR请求失败,代码为0
- 重定向除Chrome外所有浏览器中的javascript失败
- 表单重定向成功/失败页面
- 仅使用Javascript成功或失败登录后重定向至html页面
- javascript可以将我的页面重定向到一个url,如果失败,则不会发出警报
- Nodejs - Passport认证总是返回失败重定向
- 为什么ajax调用失败.下面的代码重定向到authenticate.php,而不是返回文本到login.html
- Javascript onsubmit重定向失败
- MySQL查询一直失败.页面没有重定向
- Safari在302重定向后失败了CORS请求
- NodeJS Passport身份验证-始终重定向到失败url
- 带有上载进度和重定向的XHR CORS请求失败
- 当' mapHooks '失败时重定向到另一个路由
- Javascript和SAML重定向失败
- $http拦截器:身份验证失败时重定向
- 如果网页 URL 链接失败,则重定向 Javascript URL