> ## 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-PHP SDK を使用して、ステートフルな PHP Web アプリケーションのログイン、ログアウト、ユーザープロファイル取得を設定する方法を説明します。

Auth0-PHP SDK には、`Auth0\SDK\Auth0`、`Auth0\SDK\API\Authentication`、`Auth0\SDK\API\Management` という 3 つの主要クラスが含まれており、それぞれ Auth0 API の異なる機能に対応するインターフェースを提供します。ユーザーのセッションを管理する必要があるステートフルな Web アプリケーションを構築している場合、最も多く利用するのはベースの `Auth0` クラスです。このクラスには、ログインやログアウト、ユーザー認証情報の取得、利用可能なセッションの確認、コールバック処理など、一般的な認証およびセッション管理タスクを処理するためのメソッドが用意されています。これらのタスクについては、以下で説明します。

これらの機能やその他の詳細については、[Authentication API を使用する](/docs/ja-jp/libraries/auth0-php/using-the-authentication-api-with-auth0-php)を参照してください。

<div id="prerequisites">
  ## 前提条件
</div>

以下のドキュメントでは、[Auth0-PHP](/docs/ja-jp/libraries/auth0-php) の手順を完了しており、そこで示されているコードを基に進めることを前提としています。

<div id="log-in">
  ## ログイン
</div>

PHP SDK のデフォルトのログイン処理では、[Authorization Code grant](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow/call-your-api-using-the-authorization-code-flow) と Auth0 の <Tooltip tip="Universal Login: アプリケーションは、ユーザーの本人確認を行うために、Auth0 の認可サーバーでホストされている Universal Login にリダイレクトされます。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Universal+Login">Universal Login</Tooltip> ページを組み合わせて使用します。大まかな流れは次のとおりです。

1. アクセスを要求したユーザーは、Universal Login ページにリダイレクトされます。
2. ユーザーは、[利用可能なさまざまな接続](/docs/ja-jp/authenticate/identity-providers) のいずれかを使って認証します。たとえば、ソーシャル (Google、X、Facebook) 、データベース (メールアドレスとパスワード) 、パスワードレス (メール、SMS) 、エンタープライズ (ActiveDirectory、ADFS、Office 365) などです。
3. 成功すると、ユーザーは `code` と `state` の値とともにアプリケーションのコールバック URL にリダイレクトされるか、POST されます。失敗した場合は、`error` と `error_description` が返されます。
4. 認証に成功した場合は、`state` の値を検証します。
5. `state` が有効であれば、`code` の値を使って Auth0 から ID トークンやアクセストークンを取得します。
6. ID トークン内のユーザー情報は、アカウントの作成、アプリケーション固有のセッションの開始、またはユーザーセッションとしての保持に利用できます。

Auth0-PHP がこれらの手順の大半を自動的に処理してくれます。アプリケーション側で必要なのは次のとおりです。

1. ユーザーがログインする必要があるときに `Auth0\SDK\Auth0::login()` を呼び出す (例: リンクをクリックしたとき、制限されたコンテンツにアクセスしたときなど)
2. ユーザーがコールバック URL にリダイレクトされたときに `Auth0\SDK\Auth0::exchange()` を呼び出す
3. ユーザーがログイン済みかどうかを確認し、ユーザー情報を取得する必要があるときに `Auth0\SDK\Auth0::getCredentials()` を呼び出す

これらの手順のシンプルな実装例は、次のようになります。

```php lines theme={null}
// 👆 上記の「前提条件」にリンクされている「はじめに」ガイドの続きです。そこで作成した index.php ファイルに追記してください。

// getExchangeParameters() を使用すると、認証後のコード交換に必要なすべてのパラメーターがコールバック URL に存在するかを確認できます。
if ($auth0->getExchangeParameters()) {
    // パラメーターが存在する場合、コード交換を実行します。
    $auth0->exchange();
}

// ユーザーがすでにログインしているか確認する
$session = $auth0->getCredentials();

if ($session === null || $session->accessTokenExpired) {
    // ユーザーはログインしていないか、アクセストークンの有効期限が切れています。
    // 認証のために Universal Login ページにリダイレクトします。
    header("Location: " . $auth0->login());
    exit;
}

// 🎉 この時点で、$session からアクセス可能な認証済みユーザーセッションが存在します。以降はアプリケーション独自のロジックを実装してください！
echo "Authenticated!";
```

最後に、設定ページにある Auth0 Application の "Allowed Callback URLs" フィールドに、アプリケーションの URL を追加する必要があります。そうすると、スクリプトを埋め込んだページを読み込んだときに、次のようになるはずです。

1. すぐに、テナント用の Auth0 ログインページにリダイレクトされる。
2. いずれかの接続を使って正常にログインすると、アプリにリダイレクトされる。
3. 'Authenticated!' と表示されたシンプルなページが表示される。

<div id="profile">
  ## プロフィール
</div>

ユーザーの認証が完了したので、保存されたセッションデータを使って、ユーザープロファイルの表示などを行えます。

```php lines theme={null}
// 👆 上記のコードの続きです。index.php ファイルに追記してください。

printf(
    '<h1>Hi %s!</h1>
    <p><img width="100" src="/%s"></p>
    <p><strong>Last update:</strong> %s</p>
    <p><strong>Contact:</strong> %s %s</p>
    <p><a href="/docs/logout.php">Logout</a></p>',
    isset($session->user['nickname']) ? strip_tags($session->user['nickname']) : '[unknown]',
    isset($session->user['picture']) ? filter_var($session->user['picture'], FILTER_SANITIZE_URL) : 'https://gravatar.com/avatar/',
    isset($session->user['updated_at']) ? date('j/m/Y', strtotime($session->user['updated_at'])) : '[unknown]',
    isset($session->user['email']) ? filter_var($session->user['email'], FILTER_SANITIZE_EMAIL) : '[unknown]',
    ! empty($session->user['email_verified']) ? '✓' : '✗'
);
```

<div id="logout">
  ## ログアウト
</div>

ログインだけでなく、ユーザーがログアウトできるようにする必要もあります。ユーザーがログアウトする際は、アプリケーションのセッションを無効化しなければなりません。この SDK では、永続化されたユーザーデータとトークンデータを削除することを意味します。

```php lines theme={null}
// アプリケーションからログアウトする。
header("Location: " . $auth0->logout());
```

<Tooltip tip="シングルサインオン（SSO）: ユーザーが1つのアプリケーションにログインすると、その後ほかのアプリケーションにも自動的にログインされるサービス。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Single+Sign-on">シングルサインオン</Tooltip> (SSO) をご利用で、Auth0のセッションも終了したい場合は、[シングルサインオンのログアウトのセクション](/docs/ja-jp/libraries/auth0-php/using-the-authentication-api-with-auth0-php)を参照してください。ログアウトについて詳しくは、[Auth0でのログアウトの仕組み](/docs/ja-jp/authenticate/login/logout)を参照してください。

<div id="learn-more">
  ## 詳細情報
</div>

* [Auth0-PHP を始める](/docs/ja-jp/libraries/auth0-php)
* [Authentication API を使用する](/docs/ja-jp/libraries/auth0-php/using-the-authentication-api-with-auth0-php)
* [Management API を使用する](/docs/ja-jp/libraries/auth0-php/using-the-management-api-with-auth0-php)
* [JWT (JSON Web Tokens) を検証する](/docs/ja-jp/libraries/auth0-php/validating-jwts-with-auth0-php)
* [Auth0-PHP 連携のトラブルシューティング](/docs/ja-jp/libraries/auth0-php/troubleshoot-auth0-php-library)
