// 👆 上記「前提条件」にリンクされている「はじめに」ガイドの続きです。そこで作成した index.php ファイルにこのコードを追記してください。
// PHP セッションを開始し、比較用に保存した state を取得できるようにします。
session_start();
// リクエストクエリから `code` および `state` パラメータを取得します(存在する場合)。
$code = filter_var($_GET['code'] ?? null, FILTER_UNSAFE_RAW, FILTER_NULL_ON_FAILURE);
$state = filter_var($_GET['state'] ?? null, FILTER_UNSAFE_RAW, FILTER_NULL_ON_FAILURE);
// リクエストクエリにコードが含まれているか確認します。
if ($code === null) {
die('No authorization code found.');
}
// state が存在するか確認し、ユーザーをリダイレクトする前に生成・保存した state と照合します。
if ($state === null || $state !== $_SESSION['state']) {
die('Invalid state.');
}
// state の照合が完了したので、保存していた値を破棄します。
unset($_SESSION['state']);
// 返却されたコードと元のリダイレクト URI を使って access_token の取得を試みます。(PSR-7 の ResponseInterface が返されます。)
$response = $auth0->authentication()->codeExchange($code);
// レスポンスのステータスコードが失敗を示しているか確認します。
if ($response->getStatusCode() !== 200) {
die("Code exchange failed.");
}
// JSON レスポンスを PHP の配列にデコードします。
$response = json_decode($response->getBody()->__toString(), true, 512, JSON_THROW_ON_ERROR);
// セッション情報を格納する配列を作成します。
$session = [
'id_token' => $response['id_token'] ?? null,
'access_token' => $response['access_token'] ?? null,
'scope' => $response['scope'] ?? null,
'refresh_token' => $response['refresh_token'] ?? null,
'expires_in' => $response['expires_in'] ?? null,
'user' => null
];
// ID トークンを取得しました。処理を進めましょう!
if ($session['id_token'] !== null) {
// Auth0 SDK には便利なトークン処理ユーティリティが含まれているので、それを活用します。
$token = new \Auth0\SDK\Token($auth0->configuration(), $session['id_token'], \Auth0\SDK\Token::TYPE_ID_TOKEN);
// トークンを検証し、クレームを確認します。チェックが失敗した場合は \Auth0\SDK\Exception\InvalidTokenException がスローされます。
$token->verify();
$token->validate();
$session['user'] = $token->toArray();
}
// 認証済みのセッション情報を保存します。
$_SESSION['user'] = $session;
// 認証フローが成功したことを確認するため、ユーザーのクレーム/アイデンティティを出力します。
print_r($session['user']);