Select Git revision
index.js 16.16 KiB
require("dotenv").config();
const express = require("express");
const mysql = require("mysql2");
const bodyParser = require("body-parser");
const bcrypt = require("bcryptjs");
const session = require("express-session");
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const flash = require("connect-flash");
const app = express();
const port = 3000;
const db = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
});
db.connect((err) => {
if (err) throw err;
console.log("Connected to MySQL Database");
});
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static("public"));
app.set("view engine", "ejs");
app.use(session({ secret: "secret", resave: false, saveUninitialized: false }));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
// ตั้งค่า Passport สำหรับ Auth
passport.use(
new LocalStrategy((username, password, done) => {
db.query(
"SELECT * FROM users WHERE username = ?",
[username],
async (err, results) => {
if (err) return done(err);
if (results.length === 0)
return done(null, false, { message: "ไม่พบผู้ใช้" });
const user = results[0];
const match = await bcrypt.compare(password, user.password);
if (!match) return done(null, false, { message: "รหัสผ่านไม่ถูกต้อง" });
return done(null, user); // ตรวจสอบให้แน่ใจว่าได้ข้อมูลผู้ใช้ที่ถูกต้อง
}
);
})
);
passport.serializeUser((user, done) => done(null, user.id));
passport.deserializeUser((id, done) => {
db.query("SELECT * FROM users WHERE id = ?", [id], (err, results) => {
if (err) return done(err);
done(null, results[0]); // ควรให้ข้อมูลผู้ใช้ถูกดึงมาอย่างถูกต้อง
});
});
// Middleware เช็ค Login
const isAuthenticated = (req, res, next) => {
if (req.isAuthenticated()) {