CakePHP3系でログイン認証(Auth)を実装してみよう

CakePHP- the rapid development php framework- Users (2)

2015年04月30日(木)

CakePHP3系もシリーズ化していこうと思います。今回取り組むのは、たぶんほとんどのアプリケーション開発でほぼ必須となってくるログイン認証(Auth)処理の実装をしてみます。ほぼほぼ2系とも変わらないと思いますが、やってみないとわからないですよね。ということでやってみましょう。

usersテーブル作成

これはいつもと変わらないですね。まずは会員データのテーブルを作成しましょう。

REATE TABLE IF NOT EXISTS `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ユーザID',
 `username` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'ユーザ名',
 `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'メールアドレス',
 `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'パスワード',
 `role` int(11) NOT NULL DEFAULT '1' ,
 `status` int(11) NOT NULL DEFAULT '1' ,
 `created` datetime NOT NULL COMMENT '登録日時',
 `modified` datetime NOT NULL COMMENT '更新日時',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='ユーザデータ' AUTO_INCREMENT=1 ;

まぁ参考までに。

適当にusersテーブルを作成しましょう。

 

Authコンポーネントの読み込み

CakePHPにはAuthComponentがありますので、まぁ2系もそうですが同様にAuthComponentのセットアップをします。

任意のAuth認証処理をかけたいコントローラに対して以下の設定をします。

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Auth', [
        'loginAction' => [
            'controller' => 'Users',
            'action' => 'login',
        ],
        'authError' => 'Did you really think you are allowed to see that?',
        'authenticate' => [
            'Form' => [
                'fields' => ['username' => 'email']    // ログインID対象をemailカラムへ
            ]
        ]
    ]);
}

これで、該当コントローラにアクセスすると認証がかかりusers/loginにリダイレクトされると思います。

サイト全体にかけたいときはAppControllerとかで制御すれば良いかと。

 

Viewの作成

次は、上記で認証設定した認証画面のViewを作成します。

users/loginに設定したので、

Template/Users/login.ctp

を作成します。

適当にinputとsubmitを設置しましょう。

 <?= $this->Form->create(); ?>
 <fieldset>
 <legend><?= __('Login User') ?></legend>
 <?php
    echo $this->Form->input('email');
    echo $this->Form->input('password');
 ?>
 </fieldset>
 <?= $this->Form->button(__('Submit')) ?>
 <?= $this->Form->end() ?>

これで最小限のフォームができると思います。

 

Controllerの作成

次はViewを表示するのにも使いますが、Viewからのデータを受けて認証を行うControllerのActionを作成します。

 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'
             );
         }
     }
 }

記述の仕方が2系とは違うのでちょっとよくわからなかったんですが、大体意味は一緒のようです。

これで一通りログイン処理はできるようになると思います。

users/login からemailとpasswordを入力してログインしてみよう!

 

ついでにログアウトも

ログインができたので忘れずにログアウト処理も記述しておこう。

public function logout(){
    return $this->redirect($this->Auth->logout());
}

どうでしょうか。

users/logout を実行してみるとログアウト処理がされるはずです。

これでログイン処理とログアウト処理ができるようになったと思います。

 

2系と少しだけ違いますが、設定箇所はほぼ変わらないと思います。これならなんとか行けそうかな?と思った今日この頃。

これからは3系メインで開発をしていこうと思います。

スポンサードリンク

運営サービスPR

スポンサードリンク

運営サービスPR