> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Auth0 で一時セッションを設定する方法を学びます。

# ユースケース: セッションを使用して Keep Me Signed In を設定する

<Card title="開始前に">
  以下を準備してください。

  * アプリケーション用に [Custom Domain](/ja/docs/customize/custom-domains) が設定された Auth0 テナント

  * [Auth0 CLI](https://auth0.github.io/auth0-cli/auth0_actions.html) がインストールされ、認証済みであること

  * [post-login Action](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger)

  * [non-persistent](/ja/docs/manage-users/sessions/session-lifecycle) セッションポリシーを使用する Auth0 のテナントセッション

  * (任意) セッションのアイドルタイムアウト値と絶対タイムアウト値を設定する
</Card>

**Keep Me Signed In** では、信頼できるデバイスでログイン状態を維持するかどうかをユーザーが選択できます。

<Frame>
  <img src="https://mintcdn.com/translations/xwVvTWJUElMm5YAK/docs/images/cdy7uua7fh8z/sessions-use-case/keep-me-signed-in-login.png?fit=max&auto=format&n=xwVvTWJUElMm5YAK&q=85&s=3d01d2b77165323484a4b85ac295a24f" alt="Login image" width="395" height="724" data-path="docs/images/cdy7uua7fh8z/sessions-use-case/keep-me-signed-in-login.png" />
</Frame>

* **Keep Me Signed In** チェックボックスを選択すると、ブラウザーを再起動しても維持される永続セッションが設定されます。

* **Keep Me Signed In** チェックボックスを選択しない場合は、ブラウザーを閉じると期限切れになる非永続セッションが設定されます。

[non-persistent (ephemeral) sessions](/ja/docs/manage-users/sessions/session-lifecycle) と [Actions](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger) を使用すると、このロジックはフロントエンドにリフレッシュトークンを公開することなく、サーバー側で安全に処理されます。

Custom Prompts、Auth0 CLI、Actions による一時セッションを使用することで、リフレッシュトークンを使わず、クライアント側のセッション回避策も不要で、バックエンドから完全に制御できる、安全でモダンな「Keep Me Signed In」フローを実装できます。

このソリューションは、次を重視するお客様に最適です。

* ゼロトラストのブラウザーセッション処理

* セッション永続化の最小化

* 信頼できるデバイスでの上書き

<div id="1-configure-a-universal-login-page-and-add-a-custom-prompt">
  ## 1. Universal Login ページを設定して、カスタム プロンプトを追加する
</div>

ユーザーの**Keep Me Signed In**設定を取得するには、ページ テンプレートを設定し、Auth0 CLI を使用してカスタム プロンプトを追加することで、[Universal Login](/ja/docs/customize/login-pages/universal-login/customize-signup-and-login-prompts) をカスタマイズする必要があります。

<div id="optional-enable-the-universal-login-page-template">
  ### 任意: Universal Login のページテンプレートを有効にする
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  この手順は、テナントで Universal Login テンプレートが設定されていない場合にのみ必要です。
</Callout>

次のコマンドを使用して、ページテンプレートを作成または更新します。

```bash lines theme={null}
auth0 universal-login templates update
```

カスタマイズエディターでログインページのテンプレートが開きます。ブランドに合わせた任意のHTML構造を使用できます。

以下は、背景とウィジェットのラッパーを含む最小限のテンプレート例です。

```html lines theme={null}
<!DOCTYPE html>
<html lang="{{locale}}">
  <head>
    {%- auth0:head -%}
    <style>
      body {
        background-image: url("https://images.unsplash.com/photo-1643916861364-02e63ce3e52f");
        background-size: cover;
        background-position: center;
      }
      .prompt-wrapper {
        display: flex;
        align-items: center;
        justify-content: center;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.3);
      }
    </style>
    <title>{{ prompt.screen.texts.pageTitle }}</title>
  </head>
  <body class="_widget-auto-layout">
    {% if prompt.name == "login" or prompt.name == "signup" %}
      <div class="prompt-wrapper">
        {%- auth0:widget -%}
      </div>
    {% else %}
      {%- auth0:widget -%}
    {% endif %}
  </body>
</html>
```

エディターを保存して閉じると、Auth0 CLI で確認メッセージが表示されます。

```bash lines theme={null}
テンプレートを保存しますか? Yes

▸ New Universal Login Experience のテンプレートが正常に更新されました!
```

<div id="2-add-a-keep-me-signed-in-checkbox-using-auth0-cli">
  ## 2. Auth0 CLI を使用して「Keep Me Signed In」チェックボックスを追加する
</div>

Universal Login の画面にチェックボックスを追加するには、次の手順に従います。

<div id="launch-the-customization-editor">
  ### カスタマイズエディターを開く
</div>

1. テナントの構成に応じて、login-id または login プロンプトのカスタマイズエディターを開きます。

```bash lines theme={null}
auth0 universal-login customize -p login-id
```

2. レンダリングモードで **standard** を選択します

```bash lines theme={null}
Rendering Mode: standard
```

カスタマイズエディターがローカル アドレスで起動します:

```bash lines theme={null}
http://localhost:52649
```

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  テナントで `login` と `login-id` のどちらが使用されているかわからない場合は、Auth0 の[プロンプトのカスタマイズ](/ja/docs/customize/login-pages/universal-login/customize-signup-and-login-prompts)を参照してください。
</Callout>

<div id="configure-the-checkbox">
  ### チェックボックスを設定する
</div>

カスタマイズエディターで **Partials** オプションを開きます。

1. **Prompt** を `login-id` (または `login`) に設定します

2. **Screen** を `login-id` (または `login`) に設定します

3. **Partial** を `form-content-end` に設定します

<Frame>
  <img src="https://mintcdn.com/translations/xwVvTWJUElMm5YAK/docs/images/cdy7uua7fh8z/sessions-use-case/partials.png?fit=max&auto=format&n=xwVvTWJUElMm5YAK&q=85&s=c8e9f0450643ce9e75a8c2954d0eb01e" alt="Auth0 CLI partials" width="1404" height="683" data-path="docs/images/cdy7uua7fh8z/sessions-use-case/partials.png" />
</Frame>

次の HTML スニペットを追加します。

```html lines theme={null}
<div class="ulp-field">
  <input type="checkbox" name="ulp-remember-me" id="remember-me">
  <label for="remember-me">このデバイスでサインインしたままにしますか？</label>
</div>
```

これにより、ログインフォームの下にチェックボックスが表示されます。

<div id="deploy-your-changes">
  ### 変更をデプロイする
</div>

右上の **Deploy Changes** を選択して、カスタマイズを保存し、適用します。

<div id="checkpoint">
  ## チェックポイント
</div>

Universal Login を使用してログインします。
ログイン画面には、**Keep Me Signed In**チェックボックスが表示されます。

<Frame>
  <img src="https://mintcdn.com/translations/xwVvTWJUElMm5YAK/docs/images/cdy7uua7fh8z/sessions-use-case/keep-me-signed-in-login.png?fit=max&auto=format&n=xwVvTWJUElMm5YAK&q=85&s=3d01d2b77165323484a4b85ac295a24f" alt="ログイン画像" width="395" height="724" data-path="docs/images/cdy7uua7fh8z/sessions-use-case/keep-me-signed-in-login.png" />
</Frame>

<div id="3-create-a-post-login-action-using-auth0-cli">
  ## 3. Auth0 CLI を使用して Post-Login Action を作成する
</div>

Auth0 CLI で使用する `set-session-persistence.js` という名前の新しいファイルを作成し、以下のコードを追加します。

```javascript lines theme={null}
exports.onExecutePostLogin = async (event, api) => {

  // パラメーターが存在する場合にのみ変更を適用する
  if (event.request.body['ulp-remember-me']) {
    api.session.setCookieMode('persistent');
  }
};
```

この Action は、ユーザーがチェックボックスをオンにすると、ブラウザーを再起動してもセッション Cookie が保持されるようにします。信頼できるデバイスのセッション有効期間も延長するには、以下の[信頼できるデバイスのセッション有効期間を設定する](#set-session-duration-for-trusted-devices)を参照してください。

Auth0 CLI を使用して、`set-session-persistence.js` ファイルで post-login Action を作成または更新します:

```bash lines theme={null}
auth0 actions create --name kmsi --trigger post-login --code "$(cat set-session-persistence.js)"
```

Auth0 CLI は Action の ID を返します:

```bash lines theme={null}
ID             f54c4aae-431f-4290-a7e0-cfc6a3f28386
NAME           kmsi
TYPE           post-login
STATUS         pending
DEPLOYED       ✗
LAST DEPLOYED
LAST UPDATED   0 seconds ago
CREATED        0 seconds ago
CODE           exports.onExecutePostLogin = async (event, api) => {
                   if (event.request.body['ulp-remember-me']) {
                     api.session.setCookieMode("persistent");
                   } else {
                     api.session.setCookieMode("non-persistent");
                   }
                 };
```

Action の `id` を使用してデプロイします:

```bash lines theme={null}
auth0 actions deploy <id>
```

[Auth0 Dashboard > Actions > Triggers > Post-Login](https://manage.auth0.com/#/actions/triggers/post-login) に移動し、新しい Action を現在のフローに追加して、**Apply** を選択します。

<Frame>
  <img src="https://mintcdn.com/translations/xwVvTWJUElMm5YAK/docs/images/cdy7uua7fh8z/sessions-use-case/post-login.png?fit=max&auto=format&n=xwVvTWJUElMm5YAK&q=85&s=0e66804969ae440d05200ade1b45c56a" alt="Dashboard Actions Triggers Post Login" width="2808" height="1452" data-path="docs/images/cdy7uua7fh8z/sessions-use-case/post-login.png" />
</Frame>

<div id="set-session-duration-for-trusted-devices">
  ### 信頼できるデバイスのセッション期間を設定する
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  [`setCookieMode()`](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object#api-session-setcookiemode-mode) は、セッション Cookie をブラウザーにどのように送信するかだけを制御します。永続 Cookie はブラウザーを再起動しても保持されますが、非永続 (セッション) Cookie はブラウザーを閉じると削除されます。バックエンド セッションの有効期限が変わるわけではありません。信頼できるデバイスのセッション期間を長くしたい場合は、`api.session.setExpiresAt()` または `api.session.setIdleExpiresAt()` を使用して、有効期限を明示的に設定する必要があります。
</Callout>

信頼できるデバイスのセッション期間を長くするには、`setCookieMode()` とあわせて `api.session.setExpiresAt()` または `api.session.setIdleExpiresAt()` を使用します。

```javascript lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  if (event.request.body['ulp-remember-me']) {
    api.session.setCookieMode("persistent");

    const now = Date.now();
    api.session.setExpiresAt(now + 7 * 24 * 60 * 60 * 1000); // 7日間
  } else {
    api.session.setCookieMode("nonpersistent");
  }
};
```

<div id="4-test-implementation">
  ## 4. 実装をテストする
</div>

セッションの動作を確認するには、次の操作を行います。

Universal Login を使用してログインし、**Keep Me Signed In** チェックボックスをオンにします。

* テナントログで、 (イベントタイプ `s` または `ssa`) を検索します

  * `cookie: { mode: "non-persistent" }`

  * `cookie: { mode: "persistent" }`

* Actions で `event.session.cookie.mode` を検索します
