本文へ移動
runlot

メールログイン

メールとパスワードによるログイン、およびマジックリンクを設定します。デフォルトのログイン画面が含まれています。

ワーカーが env.auth を初めて呼ぶと、アプリにログイン・登録画面が付きます。自分で作る必要はありません。

パス画面
/__runlot/auth/sign-inログイン
/__runlot/auth/sign-upサインアップ
/__runlot/auth/forgotパスワードをお忘れの場合
/__runlot/auth/resetパスワードのリセット
/__runlot/auth/signed-outログアウト状態

あなたのワーカーは /__runlot/auth で始まらないリクエストのみを受け取り、それらのリクエストを従来どおりに処理します。

自分のログイン画面を使う

デフォルトの画面の代わりに独自のフォームを使うには、以下のパスに POST してください。

await fetch("/__runlot/auth/sign-up/password", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ email, password }),
});

await fetch("/__runlot/auth/sign-in/password", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ email, password }),
});

ブラウザから送信される POST リクエストには、同じホストを指す Origin ヘッダー(Origin がない場合は Referer)が必要です。どちらのヘッダーもない場合、リクエストは拒否されます。

マジックリンク

パスワードの代わりに、ログインリンクをメールで送信します。

await fetch("/__runlot/auth/sign-in/email", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ email }),
});

ユーザーが受け取ったリンクを開くと、その場でセッションが作成されます。

アカウントのないメールアドレスにも、サインアップが開いている間はリンクが送られます。リンクを開くと、メールアドレスが確認済みの状態でアカウントが作成されます。サインアップが閉じている場合、未登録のメールアドレスには何も送信されません。どちらの場合でも応答は同じなので、リクエストからアカウントが存在するかどうかは分かりません。

パスワードのルール

  • 8 バイト以上、256 バイト以下
  • argon2id でハッシュ化(メモリ 19 MiB、2 回の反復)
  • 平文のパスワードは保存されません

ログイン試行回数の制限

同じメールアドレスから 15 分間に 10 回 ログインに失敗した場合、または同じ IP アドレスから 15 分間に 30 回 失敗した場合、しばらくの間リクエストがブロックされます。カウンターはノードのメモリ上にあるため、プロセスの再起動でリセットされます。

設定

runlot auth set allow-signup off        # Disable new sign-ups (default: on)
runlot auth set require-verified on     # Block login until the email is verified (default: off)
runlot auth set session-days 7          # Session lifetime (default: 30 days)
runlot auth set brand-name "My App"
runlot auth set brand-color "#0f6f8f"
runlot auth set brand-logo https://example.com/logo.svg

ブランディング設定はデフォルトのログイン画面に適用されます。

メールの送信方法

デフォルトの開発環境では、ログインリンクはメール送信されず、プロジェクトのログに書き込まれます。runlot logs で確認できます。実際のメール送信方法については、メールの送信 を参照してください。

このページの目次