しょぼしょぼプログラマ雑記

自分のための備忘録。 開発記録など掲載してます。 質問・ご意見・ご感想等はTwitter ( https://twitter.com/yun_hokuto ) までお気軽にどうぞ。

CakePHP3でログイン時に特定項目の判定を追加する

※当記事内容はCakePHP3のチュートリアルを一通り作った人を対象にしています  よくわからないという方は、まずCakePHP3のブログチュートリアルを作成してください


現在、CakePHP3にて開発をしています

その開発中に「Usersテーブルを論理削除にする」という内容がありました

論理削除自体はdeletedなどの項目を加えて、それの0か1などで判定するのが一般的かと思います

しかし、実際にCakePHP3のドキュメントを見ると下記のような内容が記載されています

<?php

public function login()
{
    if ($this->request->is('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'),
                'default',
                [],
                'auth'
            );
        }
    }
}

Authentication — CakePHP Cookbook 3.x documentation

この中でログイン認証を行っている部分は下記の通り、1行です

$user = $this->Auth->identify();

これで認証が通ったかどうかの判定をしているわけですが、この処理を外から設定するようにするには下記のようになります

AppController.php
<?php
public function initialize()
{
    parent::initialize();
    $this->loadComponent('Auth', [
        'authenticate' => [
            'Form' => [
                'fields' => [
                    'username' => 'email', 
                    'password' => 'passwd'
                ]
            ]
        ]
    ]);
}

これは、簡単に言うと「基本的にusernameとpasswordに設定されている項目で判定するよ」です

なのでこの場合、Usersテーブルには「email」と「passwd」の項目があり,

「判定項目を変更する」と言う場合は、ここの値を変更してあげれば解決するはずです

それ以外に追加したい、というのが今回の記事の内容です

現時点(2015/06/16)では、公式ドキュメントがほとんど日本語化されていませんので

調べる方は苦労されているでしょう

やり方は下記の通りです

AppController.php
<?php
public function initialize()
{
    $this->loadComponent('Auth', [
        'authenticate' => [
            'Form' => [
                'fields' => [
                    'username' => 'email',
                    'password' => 'passwd'
                ],
                'scope' => [
                    'Users.deleted' => 0,
                ]
            ]
        ]
    ]);
}

設定方法はこの部分です

'scope' => [
    'Users.deleted' => 0,
]

これでログイン認証時に「Usersテーブルのdeletedが0の場合」という処理が追加されました

他にも設定項目が追加できますので、興味のある方は下記公式ドキュメントを参照してください

Authentication — CakePHP Cookbook 3.x documentation


CakePHP version: 3.0.6 で作成しております