Node.js NodeJS:Passport身份验证不起作用
我正在使用passport local进行身份验证,但登录凭据未获得身份验证。我只是被重定向到failureRedirect。我甚至没有看到闪光错误 以下是我的登录路径:Node.js NodeJS:Passport身份验证不起作用,node.js,express,passport.js,passport-local,Node.js,Express,Passport.js,Passport Local,我正在使用passport local进行身份验证,但登录凭据未获得身份验证。我只是被重定向到failureRedirect。我甚至没有看到闪光错误 以下是我的登录路径: var express = require('express'); var router = express.Router(); var passport = require('passport'); var flash = require('connect-flash'); router.get('/', function
var express = require('express');
var router = express.Router();
var passport = require('passport');
var flash = require('connect-flash');
router.get('/', function(req, res, next) {
if(req.user){
return res.redirect('/profile');
}
var vm = {
title: 'Login',
error: req.flash('error')
};
res.render('login', { title: 'Place an order' });
});
router.post('/',
passport.authenticate('local', {
failureRedirect: '/login',
successRedirect: '/profile',
failureFlash: 'Invalid credentials'
}));
module.exports = router;
这是app.js:
var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var passport = require('passport');
var expressSession = require('express-session');
var flash = require('connect-flash');
var config = require('./config');
var routes = require('./routes/index');
var signup = require('./routes/signup');
var login = require('./routes/login');
var profile = require('./routes/profile');
var restrict = require('./auth/restrict');
var passportConfig = require('./auth/passport-config');
passportConfig();
mongoose.connect(config.mongoUri);
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(expressSession({
secret: 'themsec',
saveUninitialized: false,
resave: false
}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use('/', routes);
app.use('/signup', signup);
app.use('/login', login);
//app.use(restrict);
app.use('/profile', profile);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
Passport配置:
module.exports = function(){
var passport = require('passport');
var passportLocal = require('passport-local');
var userService = require('../services/user-service');
passport.use(new passportLocal.Strategy({username: 'email'},function(email, password, next){
userService.findUser(email, function(err, user){
if(err){
return next(err);
}
if(!user || user.password!= password){
return next(null, null);
}
next(null, user);
});
}));
passport.serializeUser(function(user, next){
next(null, user.email);
});
passport.deserializeUser(function(email, next){
userService.findUser(email, function(err, user){
next(err, user);
});
});
};
用户服务:
var User = require('../models/user').User;
exports.addUser = function(user, next){
var newUser = new User({
firstName: user.firstName,
lastName: user.lastName,
email:user.email.toLowerCase(),
password: user.password,
});
newUser.save(function(err){
if(err)
return next(err)
next(null);
});
};
exports.findUser = function(email, next){
User.findOne({email:email.toLowerCase()}, function(err, user){
next(err, user)
});
};
用户模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userService = require('../services/user-service');
var userSchema = new Schema({
firstName: {type: String, required: true},
lastName: String,
email: {type: String, required: true},
password: {type: String, required: true},
created: {type: Date, default: Date.now}
});
userSchema.path('email').validate(function(value, next){
userService.findUser(value, function(err, user){
if(err){
console.log(err);
return false;
}
next(!user)
});
}, 'That email is already in use');
var User = mongoose.model('User', userSchema);
module.exports = {
User:User
};
有人请帮帮我,我沮丧得发疯了。我不熟悉Node
编辑:我已删除了如果用户登录将导致无限循环的代码,但是,我仍然无法登录。将该行更改为
res.render('login',vm)代码>并重试。您看到错误了吗?我现在看到了错误,但即使凭据正确,错误仍然存在。您的代码不容易阅读。试着一步一步地调试它,缩小问题的范围。读入`userService.findUser(value,function(err,user){if(err){console.log(err);return false;}`下一个不是return(false)`吗?您可能还存在循环依赖性问题(用户服务需要用户模型,反之亦然)。通常,循环依赖项不是首选项,尽管节点尝试解析它们,但由于循环依赖项的内容,它可能会导致意外结果,将该行更改为res.render('login',vm)
然后再试一次。您看到错误了吗?我现在看到了错误,但即使凭据正确,错误仍然存在。您的代码不容易阅读。请尝试一步一步地调试它并缩小问题的范围。在`userService.findUser(value,function(err,user){if(err){console.log(err);return false;}`下一步是否返回(false)?另外,您可能存在循环依赖性问题(用户服务需要用户模型,反之亦然)。通常情况下,循环依赖性并不可取,尽管节点尝试解决它们,但由于循环依赖性,它可能会导致意外的结果