Node.js NodeJS:Passport身份验证不起作用

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

我正在使用passport local进行身份验证,但登录凭据未获得身份验证。我只是被重定向到failureRedirect。我甚至没有看到闪光错误

以下是我的登录路径:

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)?另外,您可能存在循环依赖性问题(用户服务需要用户模型,反之亦然)。通常情况下,循环依赖性并不可取,尽管节点尝试解决它们,但由于循环依赖性,它可能会导致意外的结果