このプラグインは、Cookieによって永続的にログインする認証ハンドラを提供します。 暗号化されたユーザー名/パスワードをCookieに設定する代わりに、トークンを発行する方法を使用します。
This library inspired by Barry Jaspan's article "Improved Persistent Login Cookie Best Practice", and Gabriel Birke's libray "https://github.com/gbirke/rememberme".
composer を使用してインストールできます。
以下のようにして、Composer経由でプラグインをCakePHPアプリケーションへ追加します:
php composer.phar require nojimage/cakephp-remember-me:^5.0
アプリケーションの src/Application.php
ファイルへ、次の行を追加します:
$this->addPlugin('RememberMe');
もしくは、次のコンソールコマンドを実行します
bin/cake plugin load RememberMe
マイグレーションを実行し、データベースへ必要なテーブルを作成します:
bin/cake migrations migrate -p RememberMe
cakephp/authentication を使用しているのであれば、
RememberMeTokenIdentifier
と CookeAuthenticator
を使用してください。
Application
の getAuthenticationService
フックで RememberMeプラグインの Identifier と Authenticator を呼び出す例です:
// in your src/Application.php
class Application extends ...
{
public function getAuthenticationService(...): void
{
$service = new AuthenticationService();
$fields = [
'username' => 'email',
'password' => 'password'
];
// ... 他の identifier や authenticator をセットアップ
// setup RememberMe
$service->loadIdentifier('RememberMe.RememberMeToken', compact('fields'));
$service->loadAuthenticator('RememberMe.Cookie', [
'fields' => $fields,
'loginUrl' => '/users/login',
]);
}
}
getAuthenticationService
の説明は次のドキュメントを参考にしてください: Quick Start - CakePHP Authentication 3.x
認証情報の参照に用いるフィールド名です。
default: ['username' => 'username']
$service->loadIdentifier('RememberMe.RememberMeToken', [
'fields' => [
'username' => 'email',
],
]);
認証情報のリゾルバークラスとその設定を指定します。 自作のリゾルバーを指定する場合は、
Authentication\Identifier\Resolver\OrmResolver
を拡張したクラスを指定してください。
default: 'Authentication.Orm'
$service->loadIdentifier('RememberMe.RememberMeToken', [
'resolver' => [
'className' => 'Authentication.Orm',
'userModel' => 'Administrators',
],
]);
ログインクッキーのトークンを探すモデル(テーブル)クラスを指定します。
default: 'RememberMe.RememberMeTokens'
$service->loadIdentifier('RememberMe.RememberMeToken', [
'tokenStorageModel' => 'YourTokensModel',
]);
認証情報にトークン情報を追加するときのプロパティ名です。
default: 'remember_me_token'
$service->loadIdentifier('RememberMe.RememberMeToken', [
'userTokenFieldName' => 'cookie_token',
]);
ログインURLは、文字列または配列のURLです。 デフォルトでは、nullがセットされ全てのページでチェックされます。
default: null
$service->loadAuthenticator('RememberMe.Cookie', [
'loginUrl' => '/users/login',
]);
URLチェッカーのクラス名、またはオブジェクトを指定します。
default: 'DefaultUrlChecker'
$service->loadAuthenticator('RememberMe.Cookie', [
'loginUrl' => '/users/login',
]);
フォーム認証でこのキーに値が入力されると、ログインCookieが発行されます。フォーム側ではこのキーでチェックボックスなどを追加してください。
default: 'remember_me'
$service->loadAuthenticator('RememberMe.Cookie', [
'rememberMeField' => 'remember_me',
]);
POSTデータの指定フィールドを、username
にマップします。
default: ['username' => 'username']
$service->loadAuthenticator('RememberMe.Cookie', [
'fields' => [
'username' => 'email',
],
]);
ログインCookieの書き込みオプション。
- name: cookie名 (default:
'rememberMe'
) - expires: cookieの有効期限 (default:
'+30 days'
) - path: パス (default:
'/'
) - domain: ドメイン, (default:
''
) - secure: secure フラグ (default:
true
) - httpOnly: http only フラグ (default:
true
)
$service->loadAuthenticator('RememberMe.Cookie', [
'cookie' => [
'name' => 'rememberMe',
'expires' => '+30 days',
'secure' => true,
'httpOnly' => true,
],
]);
ログインCookieトークンを格納するために使用されるモデル。
default: 'RememberMe.RememberMeTokens'
$service->loadAuthenticator('RememberMe.Cookie', [
'tokenStorageModel' => 'YourTokensModel',
]);
このオプションをtrueに設定すると、ログインCookieは認証が識別された後、常に発行されます。
default: false
$service->loadAuthenticator('RememberMe.Cookie', [
'always' => true,
]);
このオプションをtrueに設定すると、認証が識別された後に有効期限が切れたトークンを削除します。
default: true
$service->loadAuthenticator('RememberMe.Cookie', [
'dropExpiredToken' => false,
]);