AuthコンポーネントのパスワードをCakePHPを使用せずハッシュ化する方法(パスワードの生成ルール)

CakePHP3のAuthコンポーネントで使用されるパスワードは、
DefaultPasswordHasherで生成した場合、
アルゴリズムがPASSWORD_DEFAULTのpassword_hashでハッシュ化されたもの
がデータベースに保存されています。
PASSWORD_DEFAULTは、PHP5.5から7.2ではbcryptアルゴリズム

[参考記事] CakePHP2のパスワードの生成ルール

PHPのコードで、データベースに保存されているパスワードを生成するには

echo password_hash('【パスワード】', PASSWORD_DEFAULT, []);

です。

PHP5.5から7.2のPASSWORD_DEFAULTは、PASSWORD_BCRYPTと同じです。

パスワードとハッシュが一致するかどうかはpassword_verifyを使用します。

password_verify('【パスワード】' , '【ハッシュ化されたパスワード】')

コントローラの記述例

namespace App\Controller;

use Cake\Controller\Controller;

class AppController extends Controller
{
    public function initialize() {
        parent::initialize();

        $this->loadComponent('Auth', array(
            'authenticate' => array(
                'Form' => array(
                    'userModel' => 'User',
                    'fields' => array(
                        'username' => 'account',
                        'password' => 'password'
                    )
                )
            ),
            // 認証するアクション
            'loginAction' => array(
                'controller' => 'Auth',
                'action' => 'login',
                'prefix' => false
            ),
            // ログイン成功時のリダイレクト先
            'loginRedirect' => array(
                'controller' => 'Top',
                'action' => 'index',
                'prefix' => false
            ),
            // ログアウト後のリダイレクト先
            'logoutRedirect' => array(
                'controller' => 'Auth',
                'action' => 'login',
                'prefix' => false
            ),
            'authError' => 'アクセス権限がありません' // アクセス制御した時のメッセージ
        ));
    }
}

モデルの記述例

namespace Model\Entity;

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

class User extends Entity
{
    protected function _setPassword($password)
    {
        if (strlen($password) > 0) {
          return (new DefaultPasswordHasher)->hash($password);
        }
    }
}

関連記事

スポンサーリンク

clearの指定が親要素にも影響する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る