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

# PHP：Auth0-PHPを使用したログイン、ログアウト、ユーザープロファイルの返送

> PHPアプリケーションにフリクションレスのログインおよびサインアップエクスペリエンスを統合します。

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

これらの機能性などについては、[認証APIのドキュメントページ](/docs/ja-jp/libraries/auth0-php/using-the-authentication-api-with-auth0-php)を参照してください。

## 前提条件

以下の内容は[Auth0-PHP](/docs/ja-jp/libraries/auth0-php)の手順を終えていることを前提としており、そこで提供されたコードを使用します。

### ログイン

PHP SDKにデフォルトのログインプロセスは、[認証コード付与](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow/call-your-api-using-the-authorization-code-flow)をAuth0のユニバーサルログインページと組み合わせて使用します。つまり、次のプロセスになります。

1. アクセスを要求するユーザーがユニバーサルログインページにリダイレクトされます。
2. ユーザーが[さまざまな接続](/docs/ja-jp/authenticate/identity-providers)のいずれかを使用して認証します。接続にはソーシャル（Google、X、Facebook）、データベース（メールとパスワード）、パスワードレス（メール、SMS）、またはエンタープライズ（ActiveDirectory、ADFS、Office 365）などが含まれます。
3. ユーザーがアプリケーションのコールバックURLにリダイレクトまたはポストバックされ、成功の場合は`code`と`state`の値、失敗の場合は`error`と`error_description`が一緒に送信されます。
4. 認証が成功した場合は、`state`値が検証されます。
5. `state`が有効な場合、`code`値がAuth0でIDトークンおよび/またはアクセストークンと交換されます。
6. IDトークンからのIDは、アカウントの作成、アプリケーション固有のセッション開始、ユーザーセッションの永続化に使用できます。

Auth0-PHPはこれらの手順のほとんどを自動的に処理します。アプリケーションは次を行う必要があります。

1. ユーザーのログインが必要な場合（例：リンクをクリック、ウォールされたコンテンツにアクセスなど）は、`Auth0\SDK\Auth0::login()`を呼び出す。
2. ユーザーをコールバックURLにリダイレクトする場合は、`Auth0\SDK\Auth0::exchange()`を呼び出す。
3. ユーザーがログインしているかを確認し、ユーザー情報の取得が必要な場合は、`Auth0\SDK\Auth0::getCredentials()`を呼び出す。

これらの手順は以下で手軽に実装できます。

```php lines theme={null}
// 👆 We're continuing from the "getting started" guide linked in "Prerequisites" above. Append this to the index.php file you created there.

// getExchangeParameters() can be used on your callback URL to verify all the necessary parameters are present for post-authentication code exchange.
if ($auth0->getExchangeParameters()) {
    // If they're present, we should perform the code exchange.
    $auth0->exchange();
}

// Check if the user is logged in already
$session = $auth0->getCredentials();

if ($session === null) {
    // User is not logged in!
    // Redirect to the Universal Login Page for authentication.
    header("Location: " . $auth0->login());
    exit;
}

// 🎉 At this point we have an authenticated user session accessible from $session; your application logic can continue from here!
echo "Authenticated!";
```

最後に、設定ページにあるAuth0アプリケーションの［Allowed Callback URLs（許可されているコールバックURL）］フィールドにアプリケーションのURLを追加する必要があります。その後、スクリプト化されたページを読み込むと、以下が実行されます。

1. 即座にテナントのAuth0ログインページにリダイレクトします。
2. 任意の接続を使用して正常にログインした後で、アプリにリダイレクトします。
3. 「認証されました!」と表示するシンプルなページを表示します。

### プロファイル

ユーザーが認証されたら、維持されたセッションデータを使用して、ユーザープロファイルの表示などを行うことができます。

```php lines theme={null}
// 👆 We're continuing from code above. Append this to the index.php file.

printf(
    '<h1>Hi %s!</h1>
    <p><Frame><img width="100" src="/ja-jp/%s"></Frame>

</p>
    <p><strong>Last update:</strong> %s</p>
    <p><strong>Contact:</strong> %s %s</p>
    <p><a href="/docs/ja-jp/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']) ? '✓' : '✗'
);
```

### ログアウト

ログインするだけでなく、ユーザーがログアウトできるようにすることも大切です。ユーザーがログアウトすると、アプリケーションのセッションを無効にする必要があります。これを行うために、このSDKでは永続的なユーザーとトークンのデータが破棄されます。

```php lines theme={null}
// Log out of the application.
header("Location: $auth0->logout());
```

シングルサインオン（<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-jp/glossary?term=single-sign-on" tip="シングルサインオン（SSO）: ユーザーが1つのアプリケーションにログインした後、そのユーザーを他のアプリケーションに自動的にログインさせるサービス。" cta="用語集の表示">SSO</Tooltip>）を使用している場合に、Auth0セッションを終了するには、[こちらのSSOログアウトのセクション](/docs/ja-jp/libraries/auth0-php/using-the-authentication-api-with-auth0-php)を参照してください。ログアウト全般についての詳細は[こちら](/docs/ja-jp/authenticate/login/logout)をご覧ください。

## もっと詳しく

* [PHP：Auth0-PHPを使用して始める](/docs/ja-jp/libraries/auth0-php)
* [PHP：Auth0-PHPでAuthentication APIを使用する](/docs/ja-jp/libraries/auth0-php/using-the-authentication-api-with-auth0-php)
* [PHP：Auth0-PHPでManagement APIを使用する](/docs/ja-jp/libraries/auth0-php/using-the-management-api-with-auth0-php)
* [PHP：Auth0-PHPを使用したJWT（JSON Web Token）の検証](/docs/ja-jp/libraries/auth0-php/validating-jwts-with-auth0-php)
* [PHPAuth0-PHP統合のトラブルシューティング](/docs/ja-jp/libraries/auth0-php/troubleshoot-auth0-php-library)
