[CakePHP3] ざっくりとフォーム認証

フォーム(Form)による認証機能を追加する。

ユーザーテーブルは、前の記事を参考に。

AppController.phpのinitializeメソッドに認証関連のコンポーネントを設定。

Authコンポーネントをロードして、認証方法(authenticate)として、Formを使って、usernameにemalを、passwordにpasswordのカラム名を使う。
ログインは、Usersコントローラーのloginアクションで行う。

これで、どのページに行っても、AppControllerクラスを継承しているページでは、Users->loginに飛ばされるようになる。

今のところ肝心のUsers->loginが無いので、追加する。

Usersコントローラーに、loginアクションを追加。

POSTメソッドで飛んできたら、認証を行う。
OKだったら、Authコンポーネントに、ユーザーをセットして、リダイレクトさせる。
間違ってたら、フラッシュメッセージにエラー内容を書く。

次はTemplate。

Template\Users\login.ctp ファイルを追加して、以下のように書く。

ちなみに、Formヘルパーを使って書くとFormの部分は、下記のようなHTMLになるが、別にヘルパー使わずに直接書いても良い。

これで、トップページでも、何でも良いのでアクセスすると、ログイン認証ページ(/users/login)に飛ばされる。

CakePHP3-3-1

ここで、前回パスワードハッシュ化を行ったユーザーでログインしてみる。
ログインに成功すると、入ろうとしたページへリダイレクトされる。間違えると、設定したフラッシュメッセージが表示される。

もし、
「あ、やっべユーザーなんだっけ?パスワード忘れちまった。新しく作るか。」
「ユーザー追加ページ /users/add へアクセスっと。」
「ダメだ。/user/loginに飛ばされてしまう・・・。」となった場合は、UserControllerに下記を追加する。

beforeFileterメソッドを追加して、そこに、 $this->Auth->allow(['add']); と記述する。

これは、UserControllerでアクションが実行される前にaddメソッドに関しては、認証を許可しておくよ。ということ。

これで、/user/add に認証なしでつながるようになる。

ちなみに、引数なしで、 $this->Auth->allow()と書くと、全アクションが許可になる。

ログアウトもつける。

Userコントローラーに、logoutを追加

/user/logoutページへ行くと、ログアウトが実行されて、/user/loginページへリダイレクトされる。

 

認証は通ったけど、認証したユーザーによってできる事を分けたい。
などの場合に、authorizeを使用する。

まず、Authコンポーネントの初期化に以下のように一行追加する。

すると、認証したユーザーは、isAuthorizedを通るようになるので、下記のメソッドのようなものを追記する。
(下記はあくまで例 )

 

ちなみに、このページだけ認証かけたいって場合は、下記のように条件で変えたりしてもいいかも。

 

以上。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">