runlot
データ認証

メールログイン

メールアドレスとパスワードによるログインと、マジックリンクを設定します。デフォルトのログイン画面も提供します。

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 で確認できます。実際の送信方法については メール送信 を参照してください。

このページの目次