diff --git a/controllers/loginController.js b/controllers/loginController.js index 0bdf2f389e4d3a2e77eb9042434808b5d5a69a88..0ef09e331296f71a84ad0793331683ccf104e51f 100644 --- a/controllers/loginController.js +++ b/controllers/loginController.js @@ -1,5 +1,5 @@ const bcrypt = require('bcrypt'); -const pool = require('../db'); // แยกไฟล์ connection ใน db.js +const pool = require('../db'); module.exports = { showLoginPage: (req, res) => { @@ -17,14 +17,13 @@ module.exports = { const user = rows[0]; const match = await bcrypt.compare(rpassword, user.password); - if (!match) { + if (match) { + req.session.userId = user.id + res.redirect('/'); + } else { req.flash('message', 'Password incorrect'); return res.redirect('/login'); } - - // login success (สามารถสร้าง session ได้ที่นี่) - req.flash('message', 'Login successful'); - res.redirect('/'); } catch (err) { console.error(err); res.status(500).send('Server error'); diff --git a/controllers/logoutController.js b/controllers/logoutController.js new file mode 100644 index 0000000000000000000000000000000000000000..712c536d5ef228d81eacaee374d90a79f94ff009 --- /dev/null +++ b/controllers/logoutController.js @@ -0,0 +1,5 @@ +module.exports = (req, res) => { + req.session.destroy(() => { + res.redirect('/') + }) +} \ No newline at end of file diff --git a/index.js b/index.js index 7b008b8d326a673145ea0c7c551d5d8d4f91a144..39e707b5f7d70313b95e960dceba00a0907cd3dd 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,7 @@ const bodyParser = require('body-parser'); const session = require('express-session'); const flash = require('connect-flash'); +global.loggedIn = null const app = express(); app.use(express.static('public')); app.use(express.json()); @@ -10,21 +11,28 @@ app.use(express.urlencoded({ extended: true })); app.use(bodyParser.urlencoded({ extended: true })); app.use(session({ secret: 'secretkey', - resave: false, + resave: true, saveUninitialized: true })); app.use(flash()); app.set('view engine', 'ejs'); +app.use('*', (req, res, next) => { + loggedIn = req.session.userId + next() +}); const indexController = require('./controllers/indexController'); const loginController = require('./controllers/loginController'); const registerController = require('./controllers/registerController'); +const logoutController = require('./controllers/logoutController'); 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.post('/user/register', registerController.registerUser); +app.get('/logout', logoutController); const port = process.env.PORT || 3000; app.listen(port, () => { diff --git a/views/index.ejs b/views/index.ejs index 20838be9eefa23a6e8881e992cca8151f89ff2d1..11f2fbebc6a994746a8a1da9753f7d4bea3d437b 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -50,12 +50,19 @@ <li class="nav-item"> <a class="nav-link" href="gallery.html">Gallery</a> </li> + <% if (loggedIn) { %> + <li class="nav-item"> + <a class="nav-link text-danger" href="/logout">Logout</a> + </li> + <% } %> + <% if (!loggedIn) { %> <li class="nav-item"> <a class="nav-link" href="/login">Login</a> </li> <li class="nav-item"> <a class="nav-link" href="/register">Register</a> </li> + <% } %> <li class="nav-item"> <a class="nav-link" href="#"><i class="fa fa-search" aria-hidden="true"></i></a> </li> diff --git a/views/login.ejs b/views/login.ejs index 0b4d5d246d0b6024e7bebbf97da61730a3c70b62..3b22bb0be07420fee0c64f44dcaa65eb4a3cb7b8 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -130,6 +130,12 @@ <main class="form-signin w-100 m-auto"> <form action="/user/login" method="POST"> + <% if (message && message.length > 0) { %> + <div class="alert alert-danger" role="alert"> + <%= message %> + </div> + <% } %> + <h1 class="h3 mb-3 fw-normal">Sign in</h1> <div class="form-floating">