メールログイン
メールとパスワードによるログイン、およびマジックリンクを設定します。デフォルトのログイン画面が含まれています。
ワーカーが 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 で確認できます。実際のメール送信方法については、メールの送信 を参照してください。