Passport登录-mysql

Passport登录-mysql,mysql,node.js,passport.js,Mysql,Node.js,Passport.js,我在使用mysql登录passport时遇到一些问题。这是我的密码: /*jshint esversion: 6 */ const LocalStrategy = require('passport-local').Strategy; const db = require('../config/db'); const bcrypt = require('bcryptjs'); module.exports = function(passport) { // ===========

我在使用mysql登录passport时遇到一些问题。这是我的密码:

    /*jshint esversion: 6 */
const LocalStrategy = require('passport-local').Strategy;
const db = require('../config/db');
const bcrypt = require('bcryptjs');

module.exports = function(passport) {

  // =========================================================================
  // passport session setup ==================================================
  // =========================================================================

  // used to serialize the user for the session
  passport.serializeUser(function(user, done) {
    done(null, user.id);
  });

  // used to deserialize the user
  passport.deserializeUser(function(id, done) {
    db.query('SELECT * FROM users WHERE id = ?', [id], function(err, rows) {
      done(err, rows[0]);
    });
  });

  // Local Strategy login
  passport.use(new LocalStrategy(function(username, password, done) {

    // Match Username
    let sql = 'SELECT * FROM users WHERE username = ?';
    db.query(sql, [username], function(err, rows) {
      if (err)
        return done(err);
      if (!rows.length) {
        return done(null, false, {message: 'Wrong user'});
      }

      //  Match Password
      bcrypt.compare(password, rows[0].password, function(err, isMatch) {
        if(err)
          return done(err);
        if(isMatch){
          return done(null, rows[0]);
        } else {
          return done(null, false, {message: 'Wrong pass'});
        }
      });
    });
  }));
};
无法发布到/user/login

没有记录其他错误,这很奇怪,因为我已经将它设置到应该工作的位置,因为我的寄存器的设置方式与此完全相同,所以我将给出我所有代码的片段,以给出一个想法,因此首先从主文件中提取片段:

// Passport config
require('./config/passport')(passport);

app.use(passport.initialize());
app.use(passport.session());

// User Route
let user = require('./routes/reg');
app.use('/user', user);
好的,现在这些东西实际上在登录路径的reg.js文件中

// Login Process
router.post('/login', function (req, res, next) {
  passport.authenticate('local', {
    sucessRedirect: '/',
    failureRedirect: '/',
    failureFlash: true,
  })(req, res, next);
});
现在是帖子的实际形式:

    <form method="POST" action="/user/login">
      <h3><label>Username:</label></h3><input type="text" name="username" placeholder="Username" /><br>
      <h3><label>Password:</label></h3><input type="password" name="password" placeholder="Password" /><br>
      <br><input type="submit" name="login" value="Login"><a href="#" style="font-size: 12px;">  Lost Password?</a>
    </form>
这并不让我感到惊讶,但是我不知道它为什么这么做


好的,我确信这不是序列化用户。我一直在查找,但找不到任何内容。

我认为登录过程中存在问题

您可以使用authenticate函数作为路由中间件来验证请求。像这样:

router.post('/login', 
  passport.authenticate('local', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  });

我100%知道它现在是在一个正确的登录上这样做的,因为我发出了一条不同的消息,而不是像现在这样试图传递它。所以它是return donenull,rows[0];然而,我仍然完全不知道我做错了什么,浏览了所有这些教程和指南,似乎我做的一切都是对的,但显然我遗漏了一些东西。你的意思是,如果登录错误,它会重定向到登录页面吗?状态码是什么?此外,serializeUser可能有问题。没有状态代码,它只是说不能发布/user/login和@chirag,如果它出错,它会工作,我会给出消息并重定向到我的失败页面,这恰好是主页。serializeUser似乎是一样的,无论我看在哪里,无论是mysql还是mongoDB,我知道它与ti有关,我只是不确定是什么,我可以在家里更好地调试它,因为我笔记本电脑上的控制台一直无法连接。几乎可以肯定有一个状态码,您可以从浏览器开发工具的“网络”选项卡上看到它:一看,删除“下一步”可能没有任何作用,因为该功能正在工作。只有当成功登录时,我才会遇到这个问题。如果这是问题所在,那么在所有其他情况下都会出现错误的用户名和/或密码。我可以;我现在不能测试它,但我想我会遇到同样的问题,或者是一个全新的问题。正如我所怀疑的那样,下一步移除会破坏它。但我不确定确切的错误,因为我只是在工作中很快就做到了。哦!成年男子下一步不是问题。但是拼写错误successRedirect在代码中是错误的,其他一切都是好的。我需要修改我的答案。一个小小的c让我头疼了好几天。我不知道;我不认为我的大脑习惯于发现像这样的简单问题。我读对了,就像我的大脑自动修正一样,这有点让人恼火。非常感谢你!
router.post('/login', 
  passport.authenticate('local', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  });