*

【CakePHP3】ログイン認証を使って管理画面を作る

公開日: : 最終更新日:2016/09/22 CakePHP3系, PHP, 開発 , , , , , ,


ここ3日間でCakePHP3がかなり理解出来てきました。
やっぱり手を動かして書きながらテストしないと覚えませんね。
書く事によって実際どう言う動作をするかが初めて理解出来ると思います。
そして公式サイトの言う通りにソースをコピペしても実際には動かない場合もあります。(苦笑
さて、それでは実際にログイン認証をテストしてみたいと思います。

参考:シンプルな認証と認可のアプリケーション

まずはユーザーテーブルを生成します。

公式によると、取りあえずbakeしちゃって良いみたいなのでbakeしちゃいます。

username と password のカラムをユーザテーブルに使用すると、CakePHPはユーザログインの実装のときにほとんどのことを自動で定義します。
と公式マニュアルが言ってますのでUsersテーブルでusername passwordと言うカラムを作っておくとお得な事があるようですね。

src/model/table/usersTable.phpの編集

src/model/table/usersTable.php を開いてマニュアルにあるようにしてみます。
取りあえずInitialのFunctionは不要だったようなので削除しました。
更にValidateFunctionを以下のように書き換えます。

ついでにfunction buildRules(RulesChecker $rules)なんてものもbakeされてたんだけど、こっちはコメントアウトで対応してみる。

src/Controller/UsersController.phpの編集

ここで重要なのは $this->Auth->allow([‘add’, ‘logout’]);これかな?
要するに add と logout のページだけは認証が無くてもページ閲覧を許可すると言う指定らしい。
このbeforFilterAppControllerに書く事で全てのページを制御する事も出来るらしい。

上記リンクの公式マニュアルのページを全てコピペする事で実装する事は出来たのだけども、結局は自分が理解しないと自由に記述する事が出来ないのでここからは自分が理解した事を解説したいと思う。

まずココの記事が分かり易かったので参考にします。
http://jmatsuzaki.com/archives/16505

もう読んだらそのままですよね。
公式では $this->loadComponent(‘RequestHandler’);この辺の記載はないのですがAppControllerに記載する場合は必要なようです。
上記の記載はUsersControllerAppControllerに記載する事によってログインしないとアクセス出来ないページとして扱えます。

1 ログイン実装の手順 For CakePHP3

ログインコンポーネント(イニシャライズ=初期化)

Table名Controller.php か AppController.php のイニシャライズに設置。
Table名に書くとそのテーブルに関するページ全てを指定したことになり
AppControllerに書くとサイト全体に対してログインが必要となります。
aucenticateは認証する値が username password のコンビであれば設定不要です。
それ以外は Form => からの連想配列で指定してあげればそれを元に認証してくれます。
loginActionについてはログイン後の遷移先を記載します。

2 ログインアクション Login()

ログインさせたいコントローラーからLoginを実装する。
失敗した場合は画面遷移させないでそのままエラーを表示
ログインに成功したらリダイレクトで手順1で設定したURLへ遷移します。

$user = $this->Auth->identify();の部分でログイン情報をDBから探して情報がマッチしていれば$userにその情報が代入されます。

3 アクセス許可設定

このページはログインしてなくてもアクセスしてイイヨと言うページを作ります。

そんなページのコントローラー部分でBeforeFilterを設定してやれば良いです。
$this->Auth->allow([‘add’,’view’])などカンマ区切りでガンガン追記していけます。

4 ログイン後の挙動

ログイン後は特にログインした時のデータを明示的に保存しなくてもAuth君が自動的に保存してくれています。
$this->set(‘user‘,$this->Auth->user());とコントローラーから呼んであげれば$userにその情報が保持されているのがわかります。
またRoleに権限情報を保存しているのでAdminなのかAutherなのかを明示的にしてあげれば権限管理なども行えます。

5 まとめ

あと、困ったのが必要最小限のソースしか書いていないのにログイン認証されない事がありました。
これは未だに原因は分かって居ないのですがModel/Entity でパスワードハッシャーをしないとログインが通らないようです。
プレーンなDBの情報からではAuthは動作しないと思った方が良さそうですね。

また、あらかじめ作っていたユーザー(ハッシュ済)情報でも認証はされません。
これはSecuritySaltの情報が違うからですね。
かならず、そのCakePHPで作ったHash情報でDBにレコード(保存)して認証をテストしないとダメです。


関連記事

no image

Gitで新規レポジトリを作る流れ【Git超初心者】

Gitの必要性 最近Gitを友人から教わりスタートしました。 私自身もずっと個人事業で一人開発だ

記事を読む

【CakePHP3】Controllerでの表示関係とTemplateのお話

ようやくCakePHP3が理解出来てきてある程度、自由に触れるかな?って言う手ごたえを感じています。

記事を読む

DavisFrameWork

CakePHP3系にデバッグキットをインストールする方法

どんな言語の開発でもデバッグしながら開発しますよね。 むしろデバッガーがなけりゃ開発は出来ない出来

記事を読む

CakePHPでデータを追加する

フォームからPOSTして データを追加するときのコードです。 $this->data 

記事を読む

DavisFrameWork

CakePHP3系をインストール

とある事から僕が7年前に作ったポータルサイトのCMSを作り直そうじゃないかと言う案件が立ちあがりまし

記事を読む

DavisFrameWork

CakePHP3系でNotice (1024)が表示される時の対処法

先日CakePHP3系をインストールした後以下のようなメッセージが表示されたのでメモ

記事を読む

CakePHP3系で地域設定と時刻設定

CakePHP3を触っていてScaffoldしてサンプルデータを追加した時に自動挿入された日付データ

記事を読む

「さくらのレンタルサーバー」のライトプランがPHP標準対応になったので早速使ってみた。

いつも愛用している「さくらのレンタルサーバー」のライトプランがPHP標準対応になったので早速使ってみ

記事を読む

Controllerでリレーション先のテーブルの並び替え

【高速化】JS/CSSを非同期読み込みにしたらサイトが高速化した時の個人的メモ

非同期読み込みとは GoogleWebMasterToolを弄っていてスピードインサイトと言うのを

記事を読む

no image

PHPでメール送信したいんだけどqdmail.phpのライブラリがうまく動かないので代替案としてコレを使うようにしました。

今までずーーーっとqdmailが良い感じだったんですけど、2008年の最終更新から更新されなくなって

記事を読む

Controllerでリレーション先のテーブルの並び替え
【高速化】JS/CSSを非同期読み込みにしたらサイトが高速化した時の個人的メモ

非同期読み込みとは GoogleWebMasterToolを弄ってい

Controllerでリレーション先のテーブルの並び替え
【CakePHP3】リレーションの外部テーブルをORDER BY ASCしたい件について

ポータルサイトを開発していて 都道府県→市町村→エリア と言う部

no image
Gitで新規レポジトリを作る流れ【Git超初心者】

Gitの必要性 最近Gitを友人から教わりスタートしました。 私自

no image
CakePHP3でモバイル判定 is_mobile()

物凄く簡単でしたな。 これは便利で使いやすい!と言うわけでCakeP

DavisFrameWork
Guzzle6をコマンドラインからインストール

Guzzle6はちょこちょこ使ってるけど、久々に使おうと思ったら忘れそ

→もっと見る

PAGE TOP ↑