1. 一覧はログインなしで見られる
  2. トークン無しの出品は401
  3. でたらめなトークンも401
  4. 正しいトークンなら出品でき、出品者が記録される
コース一覧
Node.js入門
保護ルート

Node.js入門

Node.jsの実行モデル、npm、Expressによるルーティング、REST API設計、データベース接続、トランザクションを使った購入処理、トークン認証まで、バックエンド開発の基礎を、毎レッスン実際にコードを書き、フリマアプリのAPIを自分の手で作りながら学びます。

1
Node.jsとは
01. Node.jsとは15分
02. スクリプトを実行する15分
03. npmとは15分
04. package.json15分
05. npmスクリプト15分
06. つくる:プロジェクト始動20分
07. 第1章クイズ10分
2
モジュールと非同期の復習
01. import/export15分
02. ファイルを読み書きする15分
03. async/await復習15分
04. JSONの取り回し15分
05. つくる:データ層20分
06. 第2章クイズ10分
3
はじめてのサーバー
01. サーバーとリクエスト15分
02. Expressを導入する15分
03. ルーティング15分
04. JSONを返す15分
05. 開発の回し方15分
06. つくる:サーバー始動20分
07. 第3章クイズ10分
4
REST APIのきほん
01. RESTの考え方15分
02. 一覧を返す15分
03. 1件を返す15分
04. 登録を受ける15分
05. 更新と削除15分
06. ステータスコード15分
07. つくる:商品CRUD完成20分
08. 第4章クイズ10分
5
リクエスト処理と検証
01. クエリパラメータ15分
02. 並び替えとページング15分
03. 入力検証15分
04. ミドルウェア15分
05. エラーハンドリング15分
06. つくる:検索API完成20分
07. 第5章クイズ10分
6
データベース接続
01. DBにつなぐ15分
02. 一覧・詳細をDB化15分
03. 出品をDB化15分
04. SQLインジェクション20分
05. 更新・削除をDB化15分
06. 購入トランザクション20分
07. つくる:DB版fleama20分
08. 第6章クイズ10分
7
認証のきほん
01. 認証と認可15分
02. パスワードハッシュ15分
03. ログインとトークン15分
04. 保護ルート15分
05. 本人のものだけ15分
06. つくる:認証完備20分
07. 第7章クイズ10分
8
総合制作
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 は誰でも見られるままにする

入出力例

request("GET", "/items") → "200 [{"id":1,"name":"レザースニーカー","owner":"田中"}]" request("POST", "/items", {"name":"木製のスツール"}) → "401 {"error":"ログインしてください"}" request("POST", "/items", {"name":"木製のスツール"}, "detarame") → "401 {"error":"ログインしてください"}" request("POST", "/items", {"name":"木製のスツール"}, "token-tanaka") → "201 {"id":2,"name":"木製のスツール","owner":"田中"}"

ヒント

`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 で保存