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

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

これらの機能性などについては、認証APIのドキュメントページを参照してください。

前提条件

以下の内容はAuth0-PHPの手順を終えていることを前提としており、そこで提供されたコードを使用します。

ログイン

PHP SDKにデフォルトのログインプロセスは、認証コード付与をAuth0のユニバーサルログインページと組み合わせて使用します。つまり、次のプロセスになります。

  1. アクセスを要求するユーザーがユニバーサルログインページにリダイレクトされます。

  2. ユーザーがさまざまな接続のいずれかを使用して認証します。接続にはソーシャル(Google、X、Facebook)、データベース(メールとパスワード)、パスワードレス(メール、SMS)、またはエンタープライズ(ActiveDirectory、ADFS、Office 365)などが含まれます。

  3. ユーザーがアプリケーションのコールバックURLにリダイレクトまたはポストバックされ、成功の場合はcodestateの値、失敗の場合はerrorerror_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()を呼び出す。

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

// 👆 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!";

Was this helpful?

/

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

  1. 即座にテナントのAuth0ログインページにリダイレクトします。

  2. 任意の接続を使用して正常にログインした後で、アプリにリダイレクトします。

  3. 「認証されました!」と表示するシンプルなページを表示します。

プロファイル

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

// 👆 We're continuing from code above. Append this to the index.php file.

printf(
    '<h1>Hi %s!</h1>
    <p><img width="100" src="/docs/%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']) ? '✓' : '✗'
);

Was this helpful?

/

ログアウト

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

// Log out of the application.
header("Location: $auth0->logout());

Was this helpful?

/

シングルサインオン(SSO)を使用している場合に、Auth0セッションを終了するには、こちらのSSOログアウトのセクションを参照してください。ログアウト全般についての詳細はこちらをご覧ください。

もっと詳しく