LoginSignup
1
1

More than 1 year has passed since last update.

Node.js+Express+mySQLを使用してログイン・パスワード認証する

Posted at

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/

以上、誰かのお役に立てれば幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1