PassportJS执行错误的数据库查询

时间:2015-12-12 16:00:19

标签: mysql passport.js sequelize.js passport-local

我遇到的问题是,无论输入的用户名和密码是什么,每次登录时我的PassportJS代码都会发出完全相同的查询(使用sequelize),因此我每次都成功登录。我觉得问题出在我的本地战略代码中,但我似乎无法说出来。

For Instance:我使用user_id = 3登录,email = test3 @ gmail.com,密码= test

这是生成的sql输出:

Executing (default): SELECT `user_id`, `first_name` AS `firstName`, `last_name` AS `lastName`, `email`, `password`, `createdAt`, `updatedAt` FROM `user` AS `user` WHERE `user`.`user_id` = 1;

它不应该查询user_id=1并且从不检查输入中的值,因为正在触发登录路由的成功重定向。

这是我的护照配置和路由:

  var express = require('express');
    var siteRoutes  = express.Router();
    var passport = require('passport');
    var LocalStrategy = require('passport-local').Strategy;
    var models = require('../models/db-index');

    /*====  Passport Configuration  ====*/

    // Serialize sessions
    passport.serializeUser(function(user, done) {
        console.log(user.user_id + "Serializing");
      done(null, user.user_id);
    });

    passport.deserializeUser(function(user_id, done) {
      models.User.find({where: {user_id: user_id}}).then(function(user){
        done(null, user);
      }).error(function(err){
        done(err, null);
      });
    });


    passport.use('local', new LocalStrategy({
        passReqToCallback : true,
        usernameField: 'email'
        }, 
        function(req, email, password, done) {
            console.log(req.body.email);
            console.log(req.body.password);
            //Find user by email
            models.User.findOne({ 
                email: req.body.email,
                password: req.body.password
            }).then(function(user) {
                return done(null, user);
            })
            .catch(function(err) {
                return done(null, false, req.flash('message', 'Email not found.'));
            });
        }
        ));

/*====  Login   ====*/


siteRoutes.route('/login')

    .get(function(req, res){
        res.render('pages/login.hbs');
    })

    .post(passport.authenticate('local', {
        successRedirect: '/',
        failureRedirect: '/sign-up',
        failureFlash: true
    }));



siteRoutes.route('/sign-up')

    .get(function(req, res){
        res.render('pages/sign-up.hbs');
    })

    .post(function(req, res){

        models.User.create({
            firstName: req.body.firstName,
            lastName: req.body.lastName,
            email: req.body.email,
            password: req.body.password
        }).then(function() { 
        res.redirect('/');
    }).catch(function(error){
        res.send(error);
    })

});








module.exports = siteRoutes;

用户模型:

var bcrypt   = require('bcrypt-nodejs');

module.exports = function(sequelize, DataTypes) {

var User = sequelize.define('user', {
    user_id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    firstName: {
        type: DataTypes.STRING,
        field: 'first_name'
    },
    lastName: {
        type: DataTypes.STRING,
        field: 'last_name'
    },
    email: {
        type: DataTypes.STRING,
        unique: true
    },
    password: DataTypes.STRING,

}, {
    freezeTableName: true
});
    return User;
}

model变量只是我各种模型的连接器文件。如果看到该代码有帮助,请告诉我

0 个答案:

没有答案