コース一覧
    Node.js認証・本番運用
    保護ルート

    Node.js認証・本番運用

    認証、認可、フロントエンド連携、本番運用を学び、Node.jsで保守可能なサービスを完成させられるようにします。

    1
    認証のきほん
    01. 認証と認可15分
    02. パスワードハッシュ15分
    03. ログインとトークン15分
    04. 保護ルート15分
    05. 本人のものだけ15分
    06. つくる:認証完備20分
    07. 第7章クイズ10分
    2
    総合制作
    01. fleama API完成20分
    02. Reactと接続する20分
    03. サーバーで常駐させる20分
    04. 自由拡張20分
    05. 完成と次のステップ15分

    保護ルート

    トークンを毎回確かめる

    トークンを発行できました。次は、それを持っている人だけを通す仕組みです。

    トークンはヘッダーに入れて送るのが決まりです。

    プレーンテキスト

    Authorization: Bearer 3f7a1c...

    Bearer は「持参人」という意味の決まり文句で、その後ろがトークンです。読むときは前置きを取り除きます。

    JavaScript

    const header = req.headers.authorization || "";
    const token = header.replace("Bearer ", "");

    認証ミドルウェアを書く

    第5章で学んだミドルウェアの出番です。通してよければ next()、だめなら止める。

    JavaScript

    function requireAuth(req, res, next) {
      const token = (req.headers.authorization || "").replace("Bearer ", "");
    
      if (!token) {
        return res.status(401).json({ error: "ログインしてください" });
      }
    
      const user = db.prepare("SELECT id, name FROM users WHERE token = ?").get(token);
      if (!user) {
        return res.status(401).json({ error: "ログインしてください" });
      }
    
      req.user = user;
      next();
    }

    第5章で「next() を呼び忘れると止まる」と書きました。ここではわざと止めています。401 を返して、リクエストをルートまで届けません。

    req に持たせて渡す

    JavaScript

    req.user = user;

    この 1 行が大切です。ミドルウェアで分かった「誰か」を req に付けておくと、その先のルートで使えます。

    JavaScript

    app.post("/items", requireAuth, (req, res) => {
      // ここでは req.user が必ずある
    });

    次のレッスンの認可では、この req.user と出品者を突き合わせます。

    必要なルートにだけ付ける

    app.use で全体に掛けると、商品一覧までログイン必須になります。フリマとしては、見るのは誰でもできるほうが自然です。

    JavaScript

    app.get("/items", (req, res) => { ... });              // 誰でも見られる
    app.post("/items", requireAuth, (req, res) => { ... }); // 出品はログイン必須

    ルートの 2 つ目の引数として渡すと、そのルートにだけ掛かります。守るものと開けておくものを、意識して分けてください。

    手を動かす

    演習では、認証ミドルウェアを書いて、出品だけをログイン必須にします。

    要件

    1. requireAuth はトークンが無い・一致しないなら 401 で {"error":"ログインしてください"} を返す
    2. 通ったら req.user に利用者を入れて next() を呼ぶ
    3. POST /items にだけ掛け、GET /items は誰でも見られるままにする

    ヒント

    `requireAuth(req, res, next)` を `createApp` の中に作ります。ミドルウェアなので引数は 3 つです

    トークンは `(req.headers.authorization || "").replace("Bearer ", "")` で取り出せます

    `app.post("/items", requireAuth, (req, res) => {...})` のように、2 つ目の引数として渡します

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/10

    関連レッスン

    • 本人のものだけ

      自分の出品だけ編集できるようにし、認可チェックを書けるようになります。

    • つくる:認証完備

      登録からログイン・出品・編集までを通し、認証を備えたAPIを完成できるようになります。

    • 第7章クイズ

      認証と認可の理解を4択で確認します。

    • fleama API完成

      第4章で作った一覧表と突き合わせ、仕様を満たし切れるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • トークンLLM が扱う最小の文字単位
    • 認証「この人は本当に本人?」のチェック
    • ミドルウェアリクエストとレスポンスの間に挟まる処理関数。
    • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
    • 認可「この人はこの操作していい人?」のチェック
    • 引数位置引数=順番で渡す。
    main.js
    エディタを読み込んでいます

    メモ

    保護ルート

    ⌘S で保存