Cakephp PHP WEB開発

[Cakephp2→4]コントローラ編: AuthComponentのlogin()がない件

※本サイトはPR表記を含みます。

Cakephpを利用したログイン機能実装にはAuthComponentを利用する場合は多いと思います。

Cakephp2からCakephp4へのアップデートの際、AuthComponent::login() はCake3以降からは削除されています。

その代替えとしてAuthComponent::identify() を使用することになります。

Cakephp2: AuthComponent::login()

// 多分、こんな使い方が多いと思われる
if (!$this->Auth->login()) {
    // ログイン失敗時の処理
}

 

Cakephp4: AuthComponent::identify()

public function login()
{
    if ($this->request->is('post')) {
        // POSTリクエストに対し、認証を行う
        $user = $this->Auth->identify();
        if ($user) {
            $this->Auth->setUser($user);
            return $this->redirect($this->Auth->redirectUrl());
        } else {
            $this->Flash->error(__('Username or password is incorrect'));
        }
    }
}

identify()は、AppControllerなどでAuth設定したfieldsに対し、POSTリクエストを受け取って認証を行います。
また、Cakeアップデートの場合では、Cakephp2の古いハッシュ方式に認証を対応させる必要が出てきます。

public function initialize(): void
{
    parent::initialize();
    $authenticateConfig = [
        'Form' => [
            'userModel' => 'Hoges',
            'fields' => ['username' => 'email', 'password' => 'password'],
            'passwordHasher' => [
                'className' => 'Fallback',
                'hashers' => [
                    'Default',
                    'Weak' => ['hashType' => 'sha1'], // Cakephp2のhashTypeに対応
                ],
            ],
         ],
    ];

    $this->loadComponent('Auth', [
        'authenticate' => $authenticateConfig
    ]);
}

 

 

-Cakephp, PHP, WEB開発
-