コース一覧
    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分

    本人のものだけ

    ログインしていれば何でもできる、ではない

    前のレッスンで、ログインした人だけが出品できるようになりました。ですがまだ穴があります。

    ログインさえしていれば、他人の商品も書き換えられます。 鈴木さんが田中さんの商品を編集したり、消したりできてしまいます。

    ここで認可の出番です。「あなたは誰か」は確かめました。次は「それをしてよいか」です。

    出品者と突き合わせる

    認証ミドルウェアが req.user を用意してくれているので、それと商品の出品者を比べます。

    JavaScript

    app.put("/items/:id", requireAuth, (req, res) => {
      const item = db.prepare("SELECT * FROM items WHERE id = ?").get(Number(req.params.id));
    
      if (!item) {
        return res.status(404).json({ error: "商品が見つかりません" });
      }
      if (item.owner !== req.user.name) {
        return res.status(403).json({ error: "この商品は編集できません" });
      }
    
      // ここから先は、自分の商品だと分かっている
    });

    第5章の入力検証と同じ構図です。手前で確かめ、奥では信じる。

    403 は取り消せない

    第7章の最初に書いたとおり、401 と 403 は意味が違います。

    401 はログインすれば通ります。403 はログインし直しても通りません。他人の商品は、誰としてログインしても他人の商品だからです。

    受け取った側は、この違いで「ログイン画面へ送るのか、それとも諦めてもらうのか」を決められます。

    404 と 403 のどちらを先に見るか

    上の例では 404 を先に見ています。素直な順番です。

    ただし、より慎重な作りでは他人の商品には 404 を返すこともあります。403 を返すと「その id の商品は存在する」と教えることになるからです。

    どちらが正しいというより、何を隠したいかで決まります。fleama の商品は誰でも一覧で見られるので、存在を隠す意味はありません。ですから素直に 403 を返します。

    認証と認可は場所が違う

    どこに書くか理由
    認証ミドルウェアどのルートでも同じ処理
    認可各ルートの中何と突き合わせるかがルートごとに違う

    出品は「ログインしていれば誰でも」、編集は「出品者だけ」、購入は「出品者以外」かもしれません。条件がルートごとに違うので、まとめられません。

    手を動かす

    演習では、自分の出品だけ編集・削除できるようにします。404 と 403 の順番にも気をつけてください。

    要件

    1. PUT /items/:id と DELETE /items/:id の両方に requireAuth を掛ける
    2. 商品が無ければ 404、出品者が req.user.name と違えば 403 を返す
    3. 通れば編集は {id, name, owner} を 200 で、削除は 204 を本文なしで返す

    ヒント

    初期コードの編集は、誰のものでも書き換えてしまいます。先に商品を取り出して確かめます

    順番は 404 が先、403 が後です。存在しないものに権限の話はできません

    削除も同じ形で書きます。`requireAuth` を掛けるのを忘れないでください

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

    関連レッスン

    • つくる:認証完備

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

    • 第7章クイズ

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

    • fleama API完成

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

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

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

    • 認可「この人はこの操作していい人?」のチェック
    • 認証「この人は本当に本人?」のチェック
    • ミドルウェアリクエストとレスポンスの間に挟まる処理関数。
    • 処理計算や代入を表す長方形
    main.js
    エディタを読み込んでいます

    メモ

    本人のものだけ

    ⌘S で保存