4日目 4-6

https://chat.openai.com/share/33656d3d-591a-4eeb-878d-4134ca30d6b2

Chat GPTの回答

ログイン後10分で自動的にログアウトするようにしたい場合は、セッションの設定部分を修正する必要があります。具体的には、cookie オブジェクト内で maxAge プロパティを設定し、セッションの有効期限を設定することでこれを実現できます。以下の修正済みコードは、ログイン成功から10分後にセッションが自動的に終了するように設定しています。


const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const mysql = require('mysql');
const bcrypt = require('bcrypt');
require('dotenv').config();

const app = express();
const port = 3000;

// データベース接続設定
const pool = mysql.createPool({
  connectionLimit: 10,
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME
});

// キャッシュを無効にするミドルウェア
app.use((req, res, next) => {
  res.header("Cache-Control", "no-store, no-cache, must-revalidate, private");
  next();
});

// セッションの設定
app.use(session({
  secret: 'your_secret_key',
  resave: false,
  saveUninitialized: true,
  cookie: { 
    secure: false, // 安全な通信が必要な場合はtrueにする
    maxAge: 600000 // 10分 (10 minutes in milliseconds)
  }
}));

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static('public'));

app.get('/login', (req, res) => {
  res.sendFile(__dirname + '/public/login.html');
});

app.post('/register', (req, res) => {
  const { username, password } = req.body;
  const saltRounds = 10;
  bcrypt.hash(password, saltRounds, function(err, hash) {
    pool.query('INSERT INTO users (username, password) VALUES (?, ?)', [username, hash], (err, results) => {
      if (err) throw err;
      res.redirect('/login');
    });
  });
});

app.post('/login', (req, res) => {
  const { username, password } = req.body;
  pool.query('SELECT password FROM users WHERE username = ?', [username], (err, results) => {
    if (err) throw err;
    if (results.length > 0) {
      bcrypt.compare(password, results[0].password, function(err, result) {
        if (result) {
          req.session.loggedin = true;
          req.session.username = username;
          res.redirect('/dashboard');
        } else {
          res.send('ユーザー名またはパスワードが間違っています!');
        }
      });
    } else {
      res.send('ユーザー名またはパスワードが間違っています!');
    }
  });
});

app.get('/logout', (req, res) => {
  req.session.destroy(err => {
    if (err) {
      console.log(err);
      res.status(500).json({ success: false });
    } else {
      res.json({ success: true });
    }
  });
});

app.get('/dashboard', (req, res) => {
  if (req.session.loggedin) {
    res.sendFile(__dirname + '/private/dashboard.html');
  } else {
    res.redirect('/login');
  }
});

app.listen(port, () => {
  console.log(`サーバーがポート ${port} で稼働しています`);
});


このコードでは、session ミドルウェアの cookie 設定に maxAge を追加しました。これにより、セッションクッキーが生成されてから10分後に自動的に期限切れになります。安全な HTTPS 通信を使用している場合は、secure: true に設定してください。