ターミナルを開く
ここが最初の関門です。3つの道のうち、どれか1つでいいです
いちばん楽な道:CursorやVS Codeの中で開く
CursorかVS Codeを使っている人は、これがいちばん楽です。 エディタで自分のアプリのフォルダを開いてから、次のキーを押してください。 開いた時点で、もう自分のアプリの場所にいます。移動の操作が要りません。
キーボードで Ctrl + @(または Ctrl + `)を押します。
キーボードで Control + ` を押します(⌘ ではなく Control です)。
キーが分からなければ、上のメニューの 「表示」→「ターミナル」 を選んでも同じです。
エディタを使っていない:Windowsで単体で開く
いちばん確実なのは、フォルダから直接開く方法です。移動のコマンドを打たずに済みます。
- エクスプローラーで、自分のアプリのフォルダを開く
- フォルダの中の何もないところで、Shift を押しながら右クリック
- メニューの中から 「ターミナルで開く」(または「PowerShell ウィンドウをここで開く」)を選ぶ
黒か紺色の窓が開いて、いちばん下の行が PS C:\…\自分のアプリ> のようになっている。
その > のうしろに文字を貼り付けて Enter、が基本の操作です。
その項目が出てこないとき
Windowsの版によっては出ないことがあります。その場合はこちらで開けます。
- キーボードの Windowsキー を押す
- ターミナル と打つ(日本語のままでOK)
- 出てきた「ターミナル」を選ぶ
ターミナルを、自分のアプリの場所へ移動させる
Aの道、またはBの「フォルダから開く」でうまくいった人は、ここは飛ばして 01 へ。
まず、自分のアプリのフォルダの場所(パス)を調べます。
- エクスプローラーで、自分のアプリのフォルダを開く
- 上のアドレスバーの何もないところをクリックする(文字が反転します)
- Ctrl + C でコピー
これで:ターミナルの居場所が、そのフォルダに変わります。
> cd "ここに貼り付け"
上をコピーしてターミナルに貼り、ここに貼り付け の文字を消してから、
さっきコピーしたパスを貼ってください。引用符(")は消さないでください。
フォルダ名に空白が入っていると、引用符が無いと失敗します。
PS C:\…\自分のアプリ> に変わっている。
いま開いているのが、どちらの窓か確かめる
Windowsには、似ているけれど中身が違う窓が2つあります。行の頭を見れば分かります。
| 行の頭 | 正体 | この手順では |
|---|---|---|
PS C:\…> | PowerShell | これが正解。この資料のコマンドはそのまま通ります |
C:\…>(PSが無い) | コマンドプロンプト | 一部のコマンドが通りません。下を読んでください |
そのままでも大半は動きますが、2つだけ違います。
lsは使えません →dirと打ってくださいmkdir -p app/secretは危険です。エラーも出さずに-pという名前のフォルダを作ります →mkdir app\secretと打ってください
迷うくらいなら、PowerShellに切り替えるのがおすすめです。Bの手順で開き直せます。
エディタを使っていない:Macで単体で開く
いちばん速いのは、Spotlight(検索)から開く方法です。
- ⌘ + スペース を押す(画面の真ん中に検索窓が出ます)
- ターミナル と打つ
- Enter を押す
アプリ一覧から開きたい人は、「アプリケーション」→「ユーティリティ」→「ターミナル」にあります。
白か黒の窓が開いて、いちばん下の行が ユーザー名@… % のようになっている。
その % のうしろに文字を貼り付けて Enter、が基本の操作です。
ターミナルを、自分のアプリの場所へ移動させる
Aの道でうまくいった人は、ここは飛ばして 01 へ。
Macには、打たずに済むいい方法があります。フォルダをドラッグするだけです。
- ターミナルに
cdと打つ(cd のうしろに半角スペースを1つ入れる) - Finderで、自分のアプリのフォルダをターミナルの窓にドラッグ&ドロップする
- パスが自動で入るので、Enter を押す
% cd
ドラッグを使わない人は、Finderでフォルダを右クリック →
option を押しながら 「"◯◯"のパス名をコピー」でパスが取れます。
それを cd のうしろに貼ってください。
Macの人が間違えやすいキー
動いているコマンドを止めるのは Control + C です。 ⌘ + C はコピーになってしまい、止まりません。
これはMacの人が必ず一度は間違えるところです。止めたいときは Control。
| やりたいこと | 押すキー |
|---|---|
| ターミナルに貼り付ける | ⌘ + V |
| 動いているものを止める | Control + C |
| エディタでファイルを保存する | ⌘ + S |
正しい場所にいるか、最後に1回だけ確かめる
これで:いまいる場所にあるファイルの一覧が出ます。見るだけで、何も変えません。
> ls
コマンドプロンプトの人は、こちらです。
> dir
% ls
一覧の中に package.json という名前がある。これがあれば、正しい場所にいます。
まだの状態:無い/何も出ない。まだ自分のアプリの場所にいません。CかBをやり直してください。
始める前に、3つ用意する
ここを飛ばすと、あとのコマンドがわかりにくい形で止まります
第1話で作ったWorkOSのアカウントがあるか見る
ブラウザで dashboard.workos.com を開いて、ログインできればOKです。練習環境(Staging)のまま使います。
自分のアプリを、フォルダごと複製する
前に作ったアプリで構いません。ただし、そのままでは試さないでください。
このあと打つコマンドは、あなたのプロジェクトのファイルを書き換えます。 いちばん安全なのは、フォルダごと複製して、そのコピーで試すことです。
エクスプローラーでフォルダを右クリック →「コピー」→ 何もないところで右クリック →「貼り付け」。それで十分です。
Finderでフォルダを右クリック →「複製」。それで十分です。
Gitを使っている人は、複製したフォルダで「いまどうなっているか」を先に見ておきます。
これで:いま変更が残っていないかを確かめます。何も出なければ、きれいな状態です。
git status --short
何も表示されないのがいちばん良い状態です。次に進めます。
ファイル名がずらっと出た人は、まだ保存していない変更があります。下のやり方で片付けてから進んでください。
git add -A や git add . は使わないでください。
「全部まとめて追加」という意味なので、ずっと前から置きっぱなしのメモや、別の鍵ファイルまで一緒にコミットしてしまうことがあります。
これで:名前を指定したファイルだけを、いまの状態で保存します。
git add <ファイル名>
git commit -m "WorkOSを入れる前の状態"
Gitに慣れていない人は、無理に使わずフォルダの複製だけで進めてください。そのほうが確実です。
この2行で、練習用のアプリを1本作れます。質問は出ません。 できるのは、この資料と同じ形(App Router・TypeScript)のまっさらなアプリです。 この場合、複製もgitも要りません。失敗したらフォルダごと消すだけです。
npx create-next-app@latest my-login-app --ts --app --use-npm --eslint --no-tailwind --no-src-dir --import-alias "@/*"
cd my-login-app
Node.js 22.11以上が入っているか確かめる
これで:いま入っているNode.jsの版が表示されます。何も壊しません。見るだけです。
node -v
v22.11.0 のような数字が出て、22.11以上である。
まだの状態:数字が小さい/
'node' は認識されていません と出るcommand not found: node と出る。
この場合は nodejs.org からNode.jsを入れてください。
STEP1:CLIにおまかせで入れる
ここは全部ターミナル。自分で書くコードはゼロです
WorkOSにログインする
これで:ブラウザが自動で開きます。そこでログインすると、パソコンとWorkOSのアカウントが結びつきます。
npx workos@latest auth login
開いたブラウザで、第1話で作ったアカウントでログインしてください。「どのアカウントだっけ」となった人は、第1話で登録したメールアドレスです。
npx は「入れずに、その場で動かす」という道具です。この3文字がコマンドの頭に付いているのはそのためです。
練習部屋(Staging)を選ぶ
①これで:使える環境の一覧が出ます。まだ何も変えません。
npx workos@latest env list
②これで:どれを使うか聞かれます。Staging(練習)を選んでください。
npx workos@latest env switch
③これで:もう一度一覧を出して、切り替わったかを目で確かめます。ここは必ずやってください。
npx workos@latest env list
一覧の中の練習環境(Staging)のほうに印が付いている。
危ない状態:印が本番(Production)に付いている。このまま進むと、本番をいじってしまいます。
profile に変わりました(env でも動きます)。
見つからないときは profile list / profile switch を試してください。
表示名はアカウントによって変わるので、練習用のほうが選ばれていることを確かめてください。
入れる(この回の本体)
その「AI」がどこで動くのか(実機で確かめました)
初回に約230MB取ってくるのは、AIを動かすためのプログラム本体です
(~/.workos/cache/agent-sdk/ に置かれます)。これは手元で動きます。
ただし、考えるところは手元ではありません。ログにこう書かれていました。
[credential-proxy] Started on http://127.0.0.1:52012,
forwarding to https://api.workos.com/llm-gateway
つまり、読み取ったコードは WorkOS のサーバーに送られます。
--direct を付けると自分のAnthropicのAPIキーで直接つなぐ形に変わりますが、
どちらにしても手元だけで完結はしません。
.env.local の中身も送られます
実機のログで、AIが cat .env.local を実行し、
その出力がまるごと会話に入っていることを確認しました。
同じ内容は ~/.workos/logs/ にも平文で残ります。
今回は中身がWorkOS自身の鍵だけでした。問題は、
あなたの .env.local に他社の鍵が入っている場合です。
決済サービスの鍵、データベースの接続先、ほかのAIサービスの鍵。
同じファイルに入っていれば、まとめて送られ、ログにも残ります。
フォルダを複製しても .env.local は一緒に付いてきます。複製だけでは防げません。
関係のない鍵が入っているプロジェクトでは、練習用に新しいアプリを作るか、
このSTEPの最後にある手で入れるやり方を選んでください。
これで:部品を2つ入れて、必要なファイルを5つ作って、ダッシュボード側の設定を3つ書き込みます。数分かかります。
npx workos@latest install --no-branch --no-commit
うしろの2つには、それぞれ役目があります。どちらも「勝手にやらないで」という意味です。
--no-branch… 新しいブランチを勝手に作るのを止める--no-commit… 勝手にコミットするのを止める
付けないと、変更内容を確かめる前に、別のブランチでコミットまで済んでしまいます。次の手順(何が変わったか見る)ができなくなります。
「完了」といった意味のメッセージが出て、最後にビルドが通る。
途中でいくつか質問されることがあります。落ち着いて読んで答えてください。
止まってしまったときは、--debug を付けて打ち直すと詳しい情報が出ます。
npx workos@latest install --no-branch --no-commit --debug
何が変わったか、自分の目で見る
①これで:増えたファイルと変わったファイルの名前だけが出ます。
git status --short --untracked-files=all
②これで:どのファイルが何行変わったかが出ます。中身は出ないので安全です。
git diff --stat
③これで:名前を指定したファイルだけ、中身の変化を見ます。
git diff -- app/ proxy.ts middleware.ts package.json
git diff を、うしろに何も付けずに打たないでください。
.env.local が変更に含まれていると、APIキーがそのまま画面に出ます。
上のように、見たいファイルを必ず指定してください。
④これで:.env.local が Git に載っていないかを確かめます。開かずに確かめられます。
git check-ignore -v .env.local
git ls-files -- .env.local
- 上のコマンド …
.gitignoreの行が表示される(無視の指定がある、という意味) - 下のコマンド … 何も表示されない。これが安全のしるしです
危ない状態:下のコマンドで .env.local と表示される。
Gitに載ってしまっているので、この状態でコミットしないでください。
.env.local は開かない
画面共有していたら、それだけで流出します。中身を見る必要はありません。
Gitに載っていないことだけ確かめれば十分です。
①で出た名前を見ながら、確かめるのはこの3点です。
- 見たことのないファイルが増えていないか
- 自分が書いた大事なファイルが書き換えられていないか
.env.localができているか
まっさらなNext.jsで実際に流したところ、こうなりました。
- 書き換えられた …
app/layout.tsx(1行)/app/page.tsx(89行)/package.json/package-lock.json - 新しく作られた …
app/auth/callback/route.ts/app/auth/sign-in/route.ts/app/auth/sign-up/route.ts/app/auth/actions.ts/proxy.ts
増えるファイルが大半ですが、トップページは中身が作り替えられます。
自分で書いたトップページがある人は、ここがいちばん影響を受けます。
すでに middleware.ts を持っているプロジェクトでは、それも書き換わることがあります。
--no-branch --no-commit を付け忘れると、CLIが自動でブランチを作ってコミットします。
git status -sb で、いまどのブランチにいるかがわかります。
コミットされていた場合は git show --name-only --format= HEAD でファイル名だけを確認してください。
中身まで出すコマンドは使わないでください。.env.local の秘密の値が画面に出ます。
★ 見張り役に「止めて」と書き足す(これが無いと動きません)
CLIが作る見張り役のファイルは、まだ誰も止めない設定です。 このまま次のSTEPに進むと、ログインしていない人が守ったページを開いたときに、 ログイン画面ではなく500エラーが出ます。
出るのはこの文です。ログインの話だと気づけないので、先に書いておきます。
Error: Cookies can only be modified in a Server Action or Route Handler.
エディタで、プロジェクト直下のこのファイルを開いてください。
| 使っているNext.js | 開くファイル |
|---|---|
| 16以降 | proxy.ts |
| 15以下 | middleware.ts |
これで:ログインしていない人を、ページに着く前に止めてログイン画面へ送ります。
import { authkitProxy } from '@workos-inc/authkit-nextjs';
export default authkitProxy({
middlewareAuth: {
enabled: true,
unauthenticatedPaths: ['/'],
},
});
export const config = {
matcher: [
'/((?!_next/static|_next/image|favicon.ico).*)',
],
};
import { authkitMiddleware } from '@workos-inc/authkit-nextjs';
export default authkitMiddleware({
middlewareAuth: {
enabled: true,
unauthenticatedPaths: ['/'],
},
});
export const config = {
matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],
};
unauthenticatedPaths が「見せていいページ」の一覧
ここに書いた道だけ、ログインなしで見られます。'/' はトップページのこと。
ほかにも見せたいページがあれば、['/', '/about'] のように足してください。
書き忘れたページは、全部ログインが要るようになります。 トップページを入れ忘れると、誰も入口にたどり着けません。
保存したら、次のSTEPでページを作ってから確かめます。ここでは保存だけでOKです。
(05で npm run dev したあと、守ったページを開いて
ログイン画面に飛べば成功。エラーが出たらここに戻ってきてください)
(会社のPCなど)コマンドが使えないときは、手で入れる
4番がうまくいった人は、ここは飛ばして 03 へ進んでください。
会社や学校のパソコンで、AIがコードを書き換えるコマンドを実行できないことがあります。その場合は、部品だけ手で入れられます。
npm install @workos-inc/authkit-nextjs @workos-inc/node
そのうえで、自分で用意するものが4つあります。コマンドは1つで済みますが、書く量は増えます。
- 帰り道を受け止める受け口のファイル
- アプリ全体を包む設定
- 毎回通って、ログイン状態をページに渡す場所
.env.localに4つの値
.env.local も外に出ません。
他社の鍵が入っているプロジェクトなら、こちらを選んでください。
STEP2:ダッシュボードで2か所を設定する
ここはターミナルを離れて、ブラウザでクリックします
練習環境にいるか確認して、アプリを選ぶ
ブラウザでダッシュボードを開いたら、まず Staging の表示になっているか見てください。 練習と本番は中身が別物です。ここを間違えると、設定した先が違います。
そのうえで、Applications を開いて、対象のアプリを選びます。
帰り道(リダイレクトURI)を確認する
選んだアプリの Redirects タブを開きます。 STEP1のコマンドが自動で入れてくれているので、ここは見るだけです。
http://localhost:3000/auth/callback
公式のNext.jsガイド(手で入れる道)は http://localhost:3000/callback を案内しています。
CLIで入れると /auth/callback になります。入れ方で規約が違うだけで、どちらかが間違いではありません。
大事なのは1点だけです。.env.local の NEXT_PUBLIC_WORKOS_REDIRECT_URI と、
ダッシュボードの値が一字一句そろっていること。
この資料の値に合わせて書き換えると、動かなくなります。
Redirects の一覧に住所が1行入っている。値は .env.local と同じ。
1行も入っていなかったときだけ、上の値をコピーして足してください。
http:// と localhost が使えます。本番では https:// が必須です。
★ ログアウト後の戻り先を設定する
公式ドキュメントに、はっきり書いてあります。 「Sign-out URI を設定していないと、ログアウトのときに利用者にエラーが出ます」
つらいのは、ログインは普通に通るところです。「できた!」と喜んでログアウトを押した瞬間にエラーが出るので、 原因がログインまわりにあるように見えます。そして、ログインのコードを何度見直しても、そこには何も問題がありません。
さっきと同じ画面で Sign-out URI(ログアウト後の戻り先)を探して、これを入れて保存します。 ここは自動では入りません。自分で足す唯一の設定です。
http://localhost:3000
/callback は付きません。2番とは別の値です)
STEP3:守りたいページを、守る形にする
ファイルを1枚作って、貼って、保存する。それだけです
空のファイルを1枚、新しく作る
エディタの左側にファイルの一覧が出ているはずです。そこで、
app の下に secret というフォルダを作り、その中に page.tsx を置きます。
app/secret/page.tsx
ターミナルから作りたい人は
mkdir -p app/secret
mkdir -p を打つと、エラーも出さずに -p という名前のフォルダを作ります。
こちらを使ってください。
mkdir app\secret
mkdir -p app/secret
page.tsx という名前の、中身が空のファイルが開いている。
いま作ったファイルに、これを全部貼って保存する
空のファイルなので、まるごと貼って大丈夫です。ログアウトのボタンまで入っています。 意味が分からなくても動きます。読むのはあとでいいです。
import { withAuth, signOut } from '@workos-inc/authkit-nextjs';
export default async function Page() {
const { user } = await withAuth({ ensureSignedIn: true });
return (
<div>
<p>ようこそ、{user.firstName ?? user.email} さん</p>
<form action={async () => { 'use server'; await signOut(); }}>
<button type="submit">ログアウト</button>
</form>
</div>
);
}
await withAuth({ ensureSignedIn: true }) は
「ログインしていることを確かめて、その人の情報をちょうだい」という1行です。
ただし、実際にログインしていない人を止めているのは 02の5番で直した見張り役です。
見張り役が先に止めるので、このページにはログイン済みの人しか着きません。
だからここでは、安心して user を取り出せます。
見張り役を直していないと、この行のところで
Cookies can only be modified in a Server Action or Route Handler
というエラーが出ます。実機で確かめました(Next.js 15でも16でも同じ)。
ほかの行は、それを動かすための入れ物です。
1行目の import は部品の呼び出し、async は「待つ処理がある」という印、
'use server' は「ログアウトはサーバー側で動かす」という印です。
?? で「名前があれば名前、なければメールアドレス」と書いています。
ここを {user.firstName} だけにすると、「ようこそ、 さん」という寂しい画面になります。
(あとで)すでにあるページを守りたくなったら
ここは1枚目がちゃんと動いてからでいいです。初めての人は飛ばして 05 へ。
return の中身は、いまのまま残してください。
- いちばん上に
importを1行足す export default function Page()をexport default async function Page()にするreturnの前にwithAuthの1行を足す
import { withAuth } from '@workos-inc/authkit-nextjs';
const { user } = await withAuth({ ensureSignedIn: true });
'use client' と書いてあったら
この書き方は使えません。その場合は、ブラウザ側用の useAuth を使います。
ログアウトのボタンも、そのままでは置けません(別ファイルに切り出す形になります。この回では扱いません)。
'use client';
import { useAuth } from '@workos-inc/authkit-nextjs/components';
export default function Page() {
const { user, loading } = useAuth({ ensureSignedIn: true });
if (loading) return <p>読み込み中…</p>;
return <p>ようこそ、{user.firstName ?? user.email} さん</p>;
}
useAuth() は「いま誰がログインしているか」を取るだけで、止めてはくれません。
ログイン必須にしたいなら { ensureSignedIn: true } を必ず付けてください。
動かしてみる
ターミナルで起動して、ブラウザで確かめます
アプリを起動する
これで:自分のパソコンの中でアプリが動き出します。この窓は開いたままにしてください。閉じると止まります。
npm run dev
http://localhost:3000 のようなURLが表示されて、そこで止まっている(=動き続けている状態です)。
- ダッシュボードの Redirect URI
- ダッシュボードの Sign-out URI
.env.localのNEXT_PUBLIC_WORKOS_REDIRECT_URI
守ったページを開く
ブラウザで、さっき作ったページを開きます。ターミナルは開いたままにしておいてください。
http://localhost:3000/secret
こういう順番で動きます。
- ページを開こうとする
- ログインしていないので、WorkOSのログイン画面へ飛ばされる
- 前回、自分で色を決めたあの画面が出る
- メールアドレスで登録する(自分のアドレスでOK。他人のアドレスは使わない)
- さっきのページに戻ってくる
- 「ようこそ、◯◯さん」と出る
「ようこそ、◯◯さん」と、ログアウトのボタンが出ている。ここまで来たら、この回の目的は達成です。
エラーが出たら:
Cookies can only be modified in a Server Action or Route Handler
なら、02の5番(見張り役に「止めて」と書き足す)をやっていません。そこへ戻ってください。
[STAGING] が付きます。
逆に言うと、この印が付いていない=本番を触っているということです。
3つ、試してみる
- ログアウトして、もう一度開く … また入口で止められるはずです。ここでエラーが出たら 03 の3番です
- トップページを開く … こちらはログインなしで見られます。
unauthenticatedPathsに'/'を入れたからです - 別のブラウザ(またはシークレットウィンドウ)で同じURLを開く … ログインしていない状態なので、入口で止められます
- 守っていないページを開く … 今までどおり、誰でも開けます。守るのはページ単位だ、ということが体で分かります
最後に、鍵の話をひとつ
NEXT_PUBLIC_ が付いた環境変数はブラウザから丸見えです。
「動かないから付けてみよう」は、APIキーを世界に公開する行為になります。
.env.local について守るのは、この3つだけです。
- Gitに追跡させない(02の4番で確認しました)
- 画面に出さない(
git diffを裸で打たない) - 人に見せない(画面共有中は開かない)
うまくいかないとき
上から順に、よくある順です
どこが悪いか分からないときは、まずこれ
これで:いまのプロジェクトを調べて、WorkOSまわりの問題点を並べてくれます。何も書き換えません。
npx workos@latest doctor
自分で原因を探す前に、これを1回打ってみてください。当たりが付きます。
守ったページを開くと、ログイン画面ではなく500エラーが出る
出ているのはこの文のはずです。
Error: Cookies can only be modified in a Server Action or Route Handler.
02の5番(見張り役に「止めて」と書き足す)をやっていません。そこへ戻ってください。
ログインの話だとまったく分からない文面ですが、原因はこれです。 Next.jsは「ページを描いている最中にクッキーを書くこと」を許していません。 ログイン画面へ送るにはクッキーが要るので、ページの中からは送れないのです。 クッキーを書ける場所は見張り役なので、そこで止めます。
Next.js 15でも16でも同じでした(実機で確認)。版の問題ではありません。
ログインは通るのに、ログアウトでエラーが出る
Sign-out URI が設定されていません。03 の3番をやってください。これがいちばん多いはずです。
ログイン側のコードをいくら見直しても直りません。原因はダッシュボード側です。
コマンドを打っても「そんなコマンドは無い」と言われる
'○○' は、内部コマンドまたは外部コマンド…として認識されていません と出た場合です。
command not found: ○○ と出た場合です。
原因は3つのどれかです。
- 打ち間違い … 手で打たず、コピーボタンを使ってください
- Node.jsが入っていない … 01の3番に戻って
node -vを確かめてください - コマンドプロンプトで
lsを打った …dirを使ってください
ファイルが見つからない・場所が違うと言われる
ターミナルが、自分のアプリとは別の場所にいます。00のEに戻って
ls(またはコマンドプロンプトなら dir)ls
を打ち、package.json があるか確かめてください。
無ければ、00のCで移動し直します。
ログイン後に「リダイレクトURIが違う」と怒られる
ダッシュボードに登録した住所と、アプリが使っている住所が食い違っています。見比べるポイントは3つです。
httpとhttpsが同じか- 末尾にスラッシュが付いているかどうかが同じか
- ポート番号(3000のところ)が同じか
1文字違うだけで止まります。
node -v の数字が 22.11 より小さい
Node.jsを新しくしてください。ここを飛ばすとコマンドが途中で止まります。
コマンドが途中で止まる/終わらない
まず、本当に止まっているかを確かめてください。最初の1回は数分かかります。
本当に止めたいときは CtrlControl + C です。
--debug を付けて打ち直すと、どこで止まったかが出ます。
変更を抱えたまま打つと、CLIが止めることがあります。先にコミットするか、いったん退避してください。
ログインしたのに、また入口で止められる
セッションが作れていない可能性があります。
.env.local の WORKOS_COOKIE_PASSWORD が32文字以上あるか確認してください。
ログインした人の名前が出ない
名前を登録していない人です。エラーではありません。メールアドレスを出す書き方(??)にしてあれば、そちらが表示されます。
どこを守ったのかわからなくなった
いったん全部の ensureSignedIn: true を外して、1枚だけに戻してください。一気に広げると、原因の切り分けができなくなります。
画面の項目名が、この資料と違う
WorkOSは更新が速いサービスです。この資料は2026年8月27日時点のものです。意味が近い英語を探してください。だいたい隣にあります。
それでも解決しないとき
第2話の記事にリプをください。どこで止まったか(打ったコマンドと、出たメッセージ)を書いてもらえると早いです。
ただし、貼り付けるときは .env.local の中身と、sk_ で始まる文字列を必ず消してください。それは鍵そのものです。