From 8c32468d2d7c3feba9e75641ed2f6874d6fa1aa3 Mon Sep 17 00:00:00 2001 From: 65160381 <65160381@go.buu.ac.th> Date: Mon, 24 Mar 2025 16:17:54 +0000 Subject: [PATCH] Update 4 files - /index.js - /controllers/registerController.js - /controllers/loginController.js - /views/register.ejs --- controllers/loginController.js | 13 +++++++---- controllers/registerController.js | 38 ++++++++++++++---------------- index.js | 16 +++++++++---- views/register.ejs | 39 ++++++++++++++++++++----------- 4 files changed, 62 insertions(+), 44 deletions(-) diff --git a/controllers/loginController.js b/controllers/loginController.js index a7de748..b5c3cd2 100644 --- a/controllers/loginController.js +++ b/controllers/loginController.js @@ -7,7 +7,7 @@ module.exports = { }, loginUser: async (req, res) => { - const { email, rpassword } = req.body; + const { email, password } = req.body; // เปลี่ยนจาก rpassword เป็น password เพื่อให้ชัดเจน try { const [rows] = await pool.execute('SELECT * FROM users WHERE email = ?', [email]); if (rows.length === 0) { @@ -16,17 +16,20 @@ module.exports = { } const user = rows[0]; - const match = await bcrypt.compare(rpassword, user.password); + + // ตรวจสอบรหัสผ่าน + const match = await bcrypt.compare(password, user.password); // เปลี่ยน rpassword เป็น password if (match) { req.session.userId = user.user_id; // ใช้ user_id แทน id - res.redirect('/'); + res.redirect('/'); // ถ้าการเข้าสู่ระบบสำเร็จจะ redirect ไปที่หน้า home } else { req.flash('message', 'Password incorrect'); - return res.redirect('/login'); + return res.redirect('/login'); // ถ้ารหัสผ่านไม่ตรง } } catch (err) { console.error(err); - res.status(500).send('Server error'); + req.flash('message', 'Server error, please try again later'); + res.status(500).redirect('/login'); // ถ้าเกิดข้อผิดพลาดในการเชื่อมต่อฐานข้อมูล } } }; diff --git a/controllers/registerController.js b/controllers/registerController.js index f2b6835..2eee95b 100644 --- a/controllers/registerController.js +++ b/controllers/registerController.js @@ -1,24 +1,22 @@ -const bcrypt = require('bcrypt'); -const pool = require('../db'); +// ในไฟล์ registerController.js -module.exports = { - showRegisterPage: (req, res) => { - res.render('register', { message: req.flash('message') }); - }, - - registerUser: async (req, res) => { - const { email, rpassword } = req.body; - - try { - const hashedPassword = await bcrypt.hash(rpassword, 10); - const query = 'INSERT INTO users (email, password) VALUES (?, ?)'; - await pool.execute(query, [email, hashedPassword]); +exports.showRegisterPage = (req, res) => { + res.render('register'); // ส่งค่าไปยังไฟล์ EJS ที่เป็นหน้า register +}; - req.flash('message', 'User registered successfully. Please log in.'); - res.redirect('/login'); - } catch (err) { - console.error('Error inserting user:', err); - res.status(500).send('Error occurred'); - } +exports.registerUser = async (req, res) => { + const { email, rpassword } = req.body; + + // ตรวจสอบข้อมูล เช่น ชื่อผู้ใช้และรหัสผ่าน + // สมมติว่าเราทำการเก็บข้อมูลผู้ใช้ใน DB + + try { + // ตัวอย่างการสมัคร (สมมติว่ามีการเก็บข้อมูลใน DB) + // สมมติว่าผู้ใช้สมัครสำเร็จ + req.flash('messages', 'Registration successful!'); + res.redirect('/login'); + } catch (error) { + req.flash('messages', 'Error occurred during registration. Please try again later.'); + res.redirect('/register'); } }; diff --git a/index.js b/index.js index b8c1f83..ca41d20 100644 --- a/index.js +++ b/index.js @@ -7,19 +7,25 @@ const app = express(); app.use(express.static('public')); app.use(express.json()); app.use(express.urlencoded({ extended: true })); -app.use(bodyParser.urlencoded({ extended: true })); +// ไม่จำเป็นต้องใช้ body-parser เพราะ express เองก็รองรับแล้ว +// app.use(bodyParser.urlencoded({ extended: true })); + +// ตั้งค่า session app.use(session({ secret: 'secretkey', resave: true, saveUninitialized: true })); + +// ใช้ flash messages app.use(flash()); + +// ตั้งค่า view engine เป็น ejs app.set('view engine', 'ejs'); // กำหนดค่า session สำหรับการเช็คการ login app.use('*', (req, res, next) => { - // ใช้ req.session.userId เพื่อเก็บสถานะการ login - global.loggedIn = req.session.userId; // ควรใช้ req.session มากกว่าการใช้ global + req.session.loggedIn = req.session.userId; // ใช้ session แทน global next(); }); @@ -34,8 +40,8 @@ app.get('/', indexController); app.get('/login', loginController.showLoginPage); app.post('/user/login', loginController.loginUser); app.get('/register', registerController.showRegisterPage); -app.post('/user/register', registerController.registerUser); // ลบการเรียกซ้ำ -app.get('/logout', logoutController); +app.post('/user/register', registerController.registerUser); +app.get('/logout', logoutController.logoutUser); // เพิ่ม route สำหรับ logout const port = process.env.PORT || 3000; app.listen(port, () => { diff --git a/views/register.ejs b/views/register.ejs index ab9f92a..bb3ef40 100644 --- a/views/register.ejs +++ b/views/register.ejs @@ -129,26 +129,37 @@ </svg> <main class="form-signin w-100 m-auto"> - <form action="/user/register" method="POST"> - <h1 class="h3 mb-3 fw-normal">Sign up</h1> - - <div class="form-floating"> - <label for="floatingInput">Email address</label> + +<% if (messages.length > 0) { %> + <div class="alert alert-danger"> + <ul> + <% messages.forEach(function(message) { %> + <li><%= message %></li> + <% }); %> + </ul> + </div> +<% } %> + +<form action="/user/register" method="POST"> + <h1 class="h3 mb-3 fw-normal">Sign up</h1> + + <div class="form-floating"> + <label for="floatingInput">Email address</label> <input type="email" class="form-control" id="floatingInput" name="email" placeholder="name@example.com"> - </div> - <div class="form-floating"> - <label for="floatingPassword">Password</label> + </div> + <div class="form-floating"> + <label for="floatingPassword">Password</label> <input type="password" class="form-control" id="floatingPassword" name="rpassword" placeholder="Password"> - </div> + </div> - <div class="form-check text-start my-3"> + <div class="form-check text-start my-3"> <input class="form-check-input" type="checkbox" value="remember-me" id="flexCheckDefault"> <label class="form-check-label" for="flexCheckDefault"> - Remember me + Remember me </label> - </div> - <button class="btn btn-primary w-100 py-2" type="submit">Sign up</button> - </form> + </div> + <button class="btn btn-primary w-100 py-2" type="submit">Sign up</button> +</form> </main> <script src="/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> -- GitLab