Node.js+Expressを使用し、mySQLのDBに格納されているログイン・パスワードを認証するJavaScriptコードを掲載します。
【前提バージョン】
・Windows 11
・Node.js 18.12.1
・Express 4.16.1
・mysql2@3.2.1
・mySQL 8.0.32
【ソースコード:server.js】
const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const mysql = require("mysql2/promise");
const app = express();
const sess = {
secret: 'secretsecretsecret',
cookie: { maxAge: 60000 },
resave: false,
saveUninitialized: false,
}
if (app.get('env') === 'production') {
app.set('trust proxy', 1)
sess.cookie.secure = true
}
app.use(session(sess))
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/login', (req, res) => {
res
.type('text/html')
.send(
`<form method="POST" action="/login">
<div>username<input type="text" name="username"></div>
<div>password<input type="password" name="password"></div>
<div><input type="submit" name="login"></div>
</form>`
)
});
app.post('/login', (req, res) => {
const username = req.body.username;
const password = req.body.password;
(async () => {
try {
//内容は各自の環境に合わせて変える
const con = await mysql.createConnection({
host: "localhost",
user: "root",
password: "root00",
database: "mydb"
});
const [rows, fields] = await con.query("select * from customer where login=? and password=?",[username, password]);
if (rows.length <= 0) {
console.log('sql fail!');
await con.end();
res.redirect('/login')
}
else {
console.log('sql successfull!');
await con.end();
req.session.loggedin = true;
req.session.username = username;
res.redirect('/');
}
} catch (e) {
console.log(e);
}
})();
});
app.get('/logout', (req, res) => {
console.log('logout');
req.session.destroy((err) => {
res.redirect('/login');
});
});
app.use((req, res, next) => {
if (req.session.username) {
next();
} else {
res.redirect('/login');
}
});
app.get('/', (req, res) => {
res
.type('text/html')
.send(
'Hello ' + req.session.username+'<br>'
+'<a href=\'/logout\'>logout</a>'
);
});
app.listen('3000', () => {
console.log('Application started');
});
【server.jsの起動の仕方】
node server.js
【初期ページの閲覧方法】
http://localhost:3000/
以上、誰かのお役に立てれば幸いです。