Skip to content

Latest commit

 

History

History
246 lines (177 loc) · 7.21 KB

README.ja.md

File metadata and controls

246 lines (177 loc) · 7.21 KB

RememberMe authentication adapter plugin for CakePHP

Software License Build Status Codecov Latest Stable Version

このプラグインは、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

Authenticationプラグインでの使用方法

cakephp/authentication を使用しているのであれば、 RememberMeTokenIdentifierCookeAuthenticator を使用してください。

ApplicationgetAuthenticationService フックで 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

RememberMe.RememberMeTokenIdentifier のオプション

fields

認証情報の参照に用いるフィールド名です。

default: ['username' => 'username']

    $service->loadIdentifier('RememberMe.RememberMeToken', [
        'fields' => [
            'username' => 'email',
        ],
    ]);

resolver

認証情報のリゾルバークラスとその設定を指定します。 自作のリゾルバーを指定する場合は、 Authentication\Identifier\Resolver\OrmResolver を拡張したクラスを指定してください。

default: 'Authentication.Orm'

    $service->loadIdentifier('RememberMe.RememberMeToken', [
        'resolver' => [
            'className' => 'Authentication.Orm',
            'userModel' => 'Administrators',
        ],
    ]);

tokenStorageModel

ログインクッキーのトークンを探すモデル(テーブル)クラスを指定します。

default: 'RememberMe.RememberMeTokens'

    $service->loadIdentifier('RememberMe.RememberMeToken', [
        'tokenStorageModel' => 'YourTokensModel',
    ]);

userTokenFieldName

認証情報にトークン情報を追加するときのプロパティ名です。

default: 'remember_me_token'

    $service->loadIdentifier('RememberMe.RememberMeToken', [
        'userTokenFieldName' => 'cookie_token',
    ]);

RememberMe.CookeAuthenticator のオプション

loginUrl

ログインURLは、文字列または配列のURLです。 デフォルトでは、nullがセットされ全てのページでチェックされます。

default: null

    $service->loadAuthenticator('RememberMe.Cookie', [
        'loginUrl' => '/users/login',
    ]);

urlChecker

URLチェッカーのクラス名、またはオブジェクトを指定します。

default: 'DefaultUrlChecker'

    $service->loadAuthenticator('RememberMe.Cookie', [
        'loginUrl' => '/users/login',
    ]);

rememberMeField

フォーム認証でこのキーに値が入力されると、ログインCookieが発行されます。フォーム側ではこのキーでチェックボックスなどを追加してください。

default: 'remember_me'

    $service->loadAuthenticator('RememberMe.Cookie', [
        'rememberMeField' => 'remember_me',
    ]);

fields

POSTデータの指定フィールドを、username にマップします。

default: ['username' => 'username']

    $service->loadAuthenticator('RememberMe.Cookie', [
        'fields' => [
            'username' => 'email',
        ],
    ]);

cookie

ログイン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,
        ],
    ]);

tokenStorageModel

ログインCookieトークンを格納するために使用されるモデル。

default: 'RememberMe.RememberMeTokens'

    $service->loadAuthenticator('RememberMe.Cookie', [
        'tokenStorageModel' => 'YourTokensModel',
    ]);

always

このオプションをtrueに設定すると、ログインCookieは認証が識別された後、常に発行されます。

default: false

    $service->loadAuthenticator('RememberMe.Cookie', [
        'always' => true,
    ]);

dropExpiredToken

このオプションをtrueに設定すると、認証が識別された後に有効期限が切れたトークンを削除します。

default: true

    $service->loadAuthenticator('RememberMe.Cookie', [
        'dropExpiredToken' => false,
    ]);