skillup

技術ブログ

PHP

cakePHPの認証-Authコンポーネント

投稿日:2015年10月26日 更新日:

ひさびさにPHPをやる機会があり、短期での開発だったため、cakePHPを使いました。

以前やったことがあったんですが、もう2年以上たっていますね。

といいつつも昔のソースを見ながらやることで思い出しましたし、ここ2日ぐらいしか触っていませんが、以前よりもソースがきれいに書けるようになってますね。

基本的なことは割愛し、認証部分について書きたいと思います。versionは2.5です。

特別なライブラリのインポートとかはいらないです。

モデルの定義

モデル名はなんでもいいんですけどテーブル名がUsers、ユーザー名とパスワードをusername,passwordにしておくとパラメータの変更がいらないので楽でしょう。

もちろんこれ以外のテーブル名やカラム名でも認証機能は使えます。

以下のソースの例ですがテーブル名admins,ユーザー名相当フィールドはusername、パスワード相当フィールドはpasswordとします。

コントローラーでの処理

コントローラーでの処理はまず認証を行いたいコントローラで$componentを定義します。

全体に認証をかけたいようなときはAppControllerがいいでしょう。

$component

コードを見てもらえればわかりますが

ログイン後どのページにとぶかをloginRedirect,

ログアウト後どのページにとぶかをlogoutRedirect

ログイン自体をどのプログラムで行うかをloginActionで定義します。

またテーブル名がUsersの時はいらないのですが、任意の名前にしたいとき(上記の例でいうとadminsテーブル)は

‘authenticate’=>・・・で定義する必要があります。(上記のコードでは書いていないですが、ユーザー名とパスワードに相当するカラムも指定できます。)

Auth->allow

認証がかかると当然、認証されていないページには入れなくなりますが、ログイン画面自体に認証が働いている場合、ログイン自体ができません(ユーザーの作成すらできないですね)。

そのため、認証をしないページをAuth->allowで設定できます。

一般的にはbeforeFilterなどページにアクセスする前に記述されることが多いです。

例えばloginページとlogoutページのみはずす場合は下記のように記述します。

ログインのコード

実際にloginとlogoutのコードは下記のようになります。

バージョンが違うと微妙にこの辺の書き方が違うんですよね・・・

またログイン後のページで認証を取得したユーザーの情報を見たいときは

特定のフィールド $userId = $this->Auth->user ( ‘id’ );

レコード全体 $this->Auth->user ()

になります。

保存時のコード

肝心のログインユーザーなんですが、登録するときにパスワードを平文で登録しておくと認証がとおりません。下記のように保存前にハッシュ化してあげるのがいいでしょう。

ちなみに2系では上記のように引数に$optionがないとエラーになります。

ビュー側での処理

view側での処理も非常に楽です。下記のように書いてあげればOKです。

参考リンク

CakePHP2.xのユーザー認証(Auth)の実装とかなんとか – PHP

CakePHP $this->Auth->user(‘フィールド’)が取得できない時にチェックすべきこと PHP

【CakePHP】CakePHP2.x : ModelのbeforeSave()メソッドのStrict (2048)エラー対応

http://book.cakephp.org/2.0/ja/core-libraries/components/authentication.html

やっぱ有名なフレームワークだと情報がいろいろあるのが楽ですね。

-PHP
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

cakePHPのSSL設定+jQueryのError Loading Page

cakeで作ったアプリの認証画面でhttps環境だとError Loading Pageというエラーメッセージがでてしまい、ログインできないという事象が発生。 最初はSSLが原因かとおもっていたんです …

no image

cakeでのUtilityメソッド

cakeではControllerから呼ぶメソッドはComponent,ModelはBehavior、ViewはHelperに記述するのが一般的です。 ところが、プログラムを書いているとUtility系 …

no image

cakePHPでの直SQL

今回はCakePHPにて直のSQLを書く方法を。 cakePHPにて大概の処理はもともと備わっているコマンドでなんとかなりますが、まれに直SQLを書いたほうがらくなこともあります。 書き方その1 [c …

no image

テンプレートエンジンTwigについて

SmartyにかわるテンプレートエンジンとしてTwig(ツィッグ)を勉強中。 といってもテンプレートエンジンなので基本的なことはほとんど一緒っぽいですが。 Contents1 インストール2 基本的な …

no image

wordpressのドメイン移行

WordPressのドメイン以降を行いました。 まあ、このブログの直下にエンジニア集客用ブログをおいたんですがね・・・ http://skill-up-engineering.com/gachinko …

アーカイブ