Passport.jsとJWTを使用した認証の設定と実装方法


  1. プロジェクトのセットアップ: まず、Node.jsとnpmがインストールされていることを確認してください。次に、プロジェクトのディレクトリを作成し、ターミナルでそのディレクトリに移動します。以下のコマンドを使用して、新しいプロジェクトを初期化します。
npm init -y
  1. 必要なパッケージのインストール: Passport.jsとJWTを使用するために、以下のコマンドを使用して必要なパッケージをインストールします。
npm install passport passport-jwt
  1. Passport.jsのセットアップ: Passport.jsを使用するために、次のようにpassport.jsという名前の新しいファイルを作成します。
// passport.js
const passport = require('passport');
const passportJWT = require('passport-jwt');
const JWTStrategy = passportJWT.Strategy;
const ExtractJWT = passportJWT.ExtractJwt;
const User = require('./models/User'); // ユーザーモデルのパスに適宜修正
passport.use(new JWTStrategy({
  jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
  secretOrKey: 'your_secret_key' // 適切なシークレットキーに置き換えてください
},
async (jwtPayload, done) => {
  try {
    const user = await User.findById(jwtPayload.id); // ユーザーモデルのIDフィールドに適宜修正
    if (user) {
      return done(null, user);
    } else {
      return done(null, false);
    }
  } catch (error) {
    return done(error, false);
  }
}));
  1. Express.jsアプリケーションの設定: Express.jsアプリケーションのエントリーファイル(通常はapp.jsまたはindex.js)で、Passport.jsを設定します。
// app.js または index.js
const express = require('express');
const passport = require('passport');
const app = express();
// ...
app.use(passport.initialize());
// ...
// ルートハンドラーの前に、認証が必要な場合は以下のようにpassport.authenticateを使用します
app.get('/protected-route', passport.authenticate('jwt', { session: false }), (req, res) => {
  res.json({ message: '認証が成功しました!' });
});
// ...
app.listen(3000, () => {
  console.log('サーバーがポート3000で起動しました。');
});
  1. ユーザーログインとトークン生成: ユーザーがログインした後、トークンを生成して返すエンドポイントを作成します。
// auth.js
const express = require('express');
const passport = require('passport');
const jwt = require('jsonwebtoken');
const router = express.Router();
router.post('/login', (req, res, next) => {
  passport.authenticate('local', { session: false }, (err, user, info) => {
    if (err || !user) {
      return res.status(400).json({ message: '認証に失敗しました。' });
    }
    req.login(user, { session: false }, (err) => {
      if (err) {
        res.send(err);
      }
      const token = jwt.sign({ id: user.id }, 'your_secret_key'); // 適切なシークレットキーに置き換えてください
      return res.json({ token });
    });
  })(req, res, next);
});

内容としては、以下の手順を説明します:

  1. プロジェクトのセットアップ
  2. 必要なパッケージのインストール
  3. Passport.jsのセットアップ
  4. Express.jsアプリケーションの設定
  5. ユーザーログインとトークン生成

それぞれの手順で必要なコード例を提供し、認証の設定と実装方法を分かりやすく説明します。