MySQL Session Store不存储记录 但是当我使用mysql workbence选择会话表中的所有记录时,没有记录

问题描述

我做了一个小项目,尝试使用express-sessionexpress-MysqL-sessionpassportpassport-local来使用会话创建登录身份验证系统。

当我登录时,似乎没有任何问题。

但是当我使用MysqL workbence选择会话表中的所有记录时,没有记录。

这是我的第一次,我不确定是否做错了什么。

这是git repo:
https://github.com/Coddielam/nodejs-express-session-mysql/blob/master/app.js

const express = require("express");
const MysqL = require("MysqL");
const session = require("express-session");
const MysqLStore = require("express-MysqL-session");
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const bcrypt = require("bcrypt");

// get access to stuff stored in .env file
require("dotenv").config();
// init Express app
const app = express();

// Global middlewares for parsing request object
app.use(express.urlencoded({ extended: false }));

/****************************** MysqL connection ******************************/
// configuration
const databaseConfig = {
  host: "localhost",user: process.env.DB_User,port: 3306,password: process.env.DB_Password,database: "Chirp",};

// Promisify database client
// tutorial: https://codeburst.io/node-js-MysqL-and-promises-4c3be599909b
class Database {
  constructor(config) {
    this.connection = MysqL.createConnection(
      config,console.log("Database connected...")
    );
  }

  query(sql,args) {
    return new Promise((resolve,reject) => {
      this.connection.query(sql,args,(err,rows) => {
        if (err) return reject(err);
        resolve(rows);
      });
    });
  }
  close() {
    return new Promise((resolve,reject) => {
      this.connection.end((err) => {
        if (err) return reject(err);
        resolve();
      });
    });
  }
}

// creating a database instance with modified(promisified) query methods
// Connection created automatically upon instantiating
const Chirp = new Database(databaseConfig);

/****************************** Session Setup ******************************/
const sessionStore = new MysqLStore(
  {
    host: "localhost",createDatabaseTable: true,schema: {
      tableName: "session",columnNames: {
        session_id: "session_id",expires: "expires",data: "data",},Chirp
);

app.use(
  session({
    secret: process.env.SECRET,resave: false,saveUninitialized: false,store: sessionStore,})
);
/****************************** Passport ******************************/
const validPassport = (password,hash) => {
  bcrypt(password,hash,result) => {
    if (err) throw err;
    return result;
  });
};

const genPassword = (password) => {
  return bcrypt.hash(password,10,hash) => hash);
};

passport.use(
  "local",new LocalStrategy(
    {
      usernameField: "email",passwordField: "password",passReqToCallback: true,(req,email,password,done) => {
      let user;
      Chirp.query(`SELECT * FROM User_Login WHERE email='${email}'`)
        .then((rows) => {
          user = rows[0];
          // no email
          if (!rows.length) done(null,false);
          // compare password returns a promise
          return bcrypt.compare(password,rows[0].password);
        })
        .then((match) => {
          if (match) {
            done(null,user);
          } else {
            done(null,false);
          }
        })
        .catch((err) => console.log(err));
    }
  )
);

passport.serializeUser(function (user,cb) {
  cb(null,user.email);
});

passport.deserializeUser(function (id,cb) {
  User.findById(id,function (err,user) {
    if (err) {
      return cb(err);
    }
    cb(null,user);
  });

  Chirp.query(`SELECT * FROM sessions WHERE session_id='${id}'`)
    .then((rows) => cb(rows[0]))
    .catch((err) => console.log(err));
});

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

/****************************** Routes ******************************/

app.get("/login",res,next) => {
  const form =
    '<h1>Login Page</h1><form method="POST" action="/login">\
  Enter Email:<br><input type="email" name="email">\
  <br>Enter Password:<br><input type="password" name="password">\
  <br><br><input type="submit" value="Submit"></form>';
  res.send(form);
});

app.post(
  "/login",passport.authenticate("local",{
    failureRedirect: "/login",successRedirect: "login-success",}),req,next) => {
    if (err) throw err;
    console.log("You're logged in.");
  }
);

app.get("/login-success",res) => res.send("login success"));


const PORT = process.env.PORT || 5000;

app.listen(PORT,console.log(`Server listening on port ${PORT}...`));

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)