CakePHP3でログインフォームの認証用に Users 以外のテーブルを利用する

Users以外のテーブルをログインフォームでの認証に使用したい場合、authenticateを使用します。

src\Controller\AppController.phpに以下を追加します。
Form'userModel' => 'テーブル名'でログインフォーム用のテーブルを指定します。

public function beforeFilter(Event $event)
{
    $this->Auth->config('authenticate', [
        'Form' => ['userModel' => 'Cakeusers'],
    ]);
}

認証用テーブルの定義作成

認証用に使うテーブルとエンティティの定義を作成します。
今回はCakeusersというテーブルを認証用に用意したサンプルです。

Table の作成

\src\Model\Table\CakeusersTable.phpを作成します。

<?php
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class CakeusersTable extends Table
{
    public function validationDefault(Validator $validator)
    {
        return $validator
            ->notEmpty('username', 'このフィールドに入力してください。')
            ->add('password', [
                'length' => [
                    'rule' => ['minLength', 8],
                    'message' => 'パスワードは 8 文字以上必要です。'
                ]
            ]);
    }
}

Entity の作成

src\Model\Entity\Cakeuser.phpを作成します。

<?php
namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class Cakeuser extends Entity
{
    // 主キーフィールド "id" を除く、すべてのフィールドを一括代入可能にします。
    protected $_accessible = [
        '*' => true,
        'id' => false
    ];

    protected function _setPassword($password)
    {
        return (new DefaultPasswordHasher)->hash($password);
    }
}

コントローラーを変更しない場合

UsersController.phpで認証コントローラーを使いたい場合は、以下のようにしてテーブルを差し替えると便利です。

public function initialize()
{
    parent::initialize();
    $this->Users = TableRegistry::get('Cakeusers');
}
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です