首页 > 解决方案 > Node.js 登录身份验证系统未正确存储用户

问题描述

假设我需要passport,并且正确bcrypt,此代码应该将用户信息添加到会话中。我终其一生都无法弄清楚哪里出了问题。 文件express-sessionsmysqlApp.js

passport.use('local', new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true //passback entire req to call back
}, function(req, email, password, done) {

    connection.query("SELECT * FROM accounts WHERE email = ?", [email], async(err, rows, fields) => {
        //if an error occurrs in mysql
        if (err) {
            return done(null, false)
            connection.end()
        }
        //if there are no matching entries
        if (!rows.length) {
            console.log('invalid email')
            return done(null, false)
            connection.end()
        }
        //if the passwords don't compare
        if (!(await bcrypt.compare(password, rows[0].password))) {
            console.log('incorrect password')
            done(null, false)
            connection.end()
        }
        //if none of that happens
        req.session.user = rows[0]
        console.log('logged in')
        connection.end()
    });
}));

//handles de/serialization of the user data (all integrated from passport docs)
passport.serializeUser(function(user, done) {
    return done(null, user.id)
    console.log(user.id + "serialized")
});
passport.deserializeUser(function(id, done) {
    connection.query("SELECT * FROM accounts WHERE id = " + id, function(err, rows) {
       console.log('done' + rows[0])
       return done(err, rows[0])
    });
});

验证路由代码

router.post('/auth', passport.authenticate('local', {
    successRedirect: '/',
    failureRedirect: '/account'
}));

该代码将用户登录,该用户已登录console,然后再次将其注销,失败重定向到/account。我不知道身份验证出了什么问题,感谢您提前回复!

标签: javascriptmysqlnode.jssessionpassport.js

解决方案


您可以使用 express-session 实现相同的目的..

  1. 安装快速会话:npm i express-session --save
  2. 在您的节点应用程序中需要它:var session = require('express-session');
  3. 配置:app.use(session({ secret: "YourSecretKeyGoesHere", saveUninitialized: true, resave: true }));

然后检查你的会话..


推荐阅读