データ認証
メールログイン
メールアドレスとパスワードによるログインと、マジックリンクを設定します。デフォルトのログイン画面も提供します。
runlot.json に "auth": true を書いてデプロイすると、アプリにログイン・サインアップ画面が追加されます。自分で作る必要はありません。
| パス | 画面 |
|---|---|
/__runlot/auth/sign-in | ログイン |
/__runlot/auth/sign-up | サインアップ |
/__runlot/auth/forgot | パスワードをお忘れの場合 |
/__runlot/auth/reset | パスワード再設定 |
/__runlot/auth/signed-out | ログアウト完了 |
ワーカーが受け取るのは /__runlot/auth で始まらないリクエストだけで、それ以外はこれまでどおり処理されます。
独自のログイン画面を使う
デフォルトの画面の代わりに自作のフォームを使う場合は、次のパスにリクエストを送ってください。
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 ヘッダー(なければ 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 # 新規サインアップを無効にする(デフォルト: on)
runlot auth set require-verified on # メール確認前のログインをブロックする(デフォルト: off)
runlot auth set session-days 7 # セッションの期間(デフォルト: 30 日)
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 で確認できます。実際の送信方法については メール送信 を参照してください。