認証コンポーネント

AuthenticationComponentを使用して、認証の結果にアクセスし、ユーザーIDを取得し、ユーザーをログアウトできます。他のコンポーネントと同様に、コンポーネントをAppController::initialize()にロードします:

You can use the AuthenticationComponent to access the result of authentication, get user identity and logout user. Load the component in your AppController::initialize() like any other component:
$this->loadComponent('Authentication.Authentication', [
    'logoutRedirect' => '/users/login'  // Default is false
]);

ロードされると、AuthenticationComponentは、すべてのアクションに認証済みユーザーが存在することを要求しますが、他のアクセス制御チェックは実行しません。特定のアクションに対してこのチェックを無効にするには、allowUnauthenticated()を使用します:

Once loaded, the AuthenticationComponent will require that all actions have an authenticated user present, but perform no other access control checks. You can disable this check for specific actions using allowUnauthenticated():
// In your controller's beforeFilter method.
$this->Authentication->allowUnauthenticated(['view']);

ログインしたユーザーへのアクセス

認証コンポーネントを使用して、認証されたユーザーIDデータを取得できます:

You can get the authenticated user identity data using the authentication component:
$user = $this->Authentication->getIdentity();

リクエストインスタンスから直接アイデンティティーを取得することもできます:

You can also get the identity directly from the request instance:
$user = $request->getAttribute('identity');

ログイン状態の確認

認証プロセスが成功したかどうかを確認するには、resultオブジェクトにアクセスします:

You can check if the authentication process was successful by accessing the result object:
// Using Authentication component
$result = $this->Authentication->getResult();

// Using request object
$result = $request->getAttribute('authentication')->getResult();

if ($result->isValid()) {
    $user = $request->getAttribute('identity');
} else {
    $this->log($result->getStatus());
    $this->log($result->getErrors());
}

getStatus()から返された結果セットオブジェクトのステータスは、Resultオブジェクトの次の定数のいずれかに一致します:

The result sets objects status returned from getStatus() will match one of these these constants in the Result object:
  • ResultInterface::SUCCESS:成功した場合
  • ResultInterface::FAILURE_IDENTITY_NOT_FOUND:IDが見つからなかった場合
  • ResultInterface::FAILURE_CREDENTIALS_INVALID:資格情報が無効な場合
  • ResultInterface::FAILURE_CREDENTIALS_MISSING:リクエストに認証情報がない場合
  • ResultInterface::FAILURE_OTHER:その他の種類の失敗
  • ResultInterface::SUCCESS, when successful.
  • ResultInterface::FAILURE_IDENTITY_NOT_FOUND, when identity could not be found.
  • ResultInterface::FAILURE_CREDENTIALS_INVALID, when credentials are invalid.
  • ResultInterface::FAILURE_CREDENTIALS_MISSING, when credentials are missing in the request.
  • ResultInterface::FAILURE_OTHER, on any other kind of failure.

getErrors()によって返されるエラー配列には、認証試行が行われた特定のシステムからの追加情報が含まれています。たとえば、LDAPまたはOAuthは、実装に固有のエラーをここに配置し、原因のロギングとデバッグを容易にします。ただし、含まれている認証システムのほとんどは、ここには何も配置していません。

The error array returned by getErrors() contains additional information coming from the specific system against which the authentication attempt was made. For example LDAP or OAuth would put errors specific to their implementation in here for easier logging and debugging the cause. But most of the included authenticators don’t put anything in here.

Identityをログアウトする

IDをログアウトするには、次のようにします:

To log an identity out just do:
$this->Authentication->logout();

logoutRedirect構成を設定した場合、Authentication::logout()はその値を返し、それ以外の場合はfalseを返します。どちらの場合も、実際のリダイレクトは実行されません。

If you have set the logoutRedirect config, Authentication::logout() will return that value else will return false. It won’t perform any actual redirection in either case.

または、コンポーネントの代わりに、サービスを使用してログアウトすることもできます:

Alternatively, instead of the component you can also use the service to log out:
$return = $request->getAttribute('authentication')->clearIdentity($request, $response);

返される結果には、次のような配列が含まれます:

The result returned will contain an array like this:
[
    'response' => object(Cake\Http\Response) { ... },
    'request' => object(Cake\Http\ServerRequest) { ... },
]

Note

これにより、リクエストオブジェクトとレスポンスオブジェクトを含む配列が返されます。どちらも不変なので、新しいオブジェクトを取得できます。変更した応答オブジェクトと要求オブジェクトを引き続き使用する場合は、作業しているコンテキストに応じて、これらのインスタンスを今後使用する必要があります。

This will return an array containing the request and response objects. Since both are immutable you’ll get new objects back. Depending on your context you’re working in you’ll have to use these instances from now on if you want to continue to work with the modified response and request objects.

自動Identityチェックを構成する

デフォルトでは、AuthenticationComponentは、Controller.initializeイベント中に存在するIDを自動的に適用します。代わりに、Controller.startupイベント中にこのチェックを適用できます:

By default AuthenticationComponent will automatically enforce an identity to be present during the Controller.initialize event. You can have this check applied during the Controller.startup event instead:
// In your controller's initialize() method.
$this->loadComponent('Authentication.Authentication', [
    'identityCheckEvent' => 'Controller.startup',
]);

requireIdentityオプションを使用して、IDチェックを完全に無効にすることもできます。

You can also disable identity checks entirely with the requireIdentity option.