CakePHPでAuthコンポーネントを利用して会員認証を実装する方法
CakePHPで会員制サイトを作り始めました。Authコンポーネントは使ったことがなかったので、備忘録代わりに流れを書いておきます。
データベースにusersテーブルを作成する
フィールドはid, username, password, modified, createdを作成
app/controller/app_controller.php
すべてのコントローラでAuthコンポーネントを使うためにAppControllerを定義します。
<?php class AppController extends Controller{ var $components = array('Auth'); }
app/controllers/users_controller.php
アクションを定義します。実装が空ですが、Authコンポーネントがなんとかしてくれます。
<?php class UsersController extends AppController{ var $name = 'Users'; function login(){ //empty for auth component } function logout(){ $this->redirect($this->Auth->logout()); } }
app/views/users/login.ctp
ビューを実装します。
<?php if ($session->check('Message.auth')) { $session->flash('auth'); } echo $form->create('User', array('action' => 'login')); echo $form->input('username'); echo $form->input('password'); echo $form->end('Login');
ここまでで、/users/loginにアクセスすればログイン画面は表示できます。
次は、新規登録画面です。
app/models/user.php
Userモデルを定義していなかったので作成します。
<?php class User extends AppModel{ var $name = 'User'; }
app/controllers/users_controller.php
コントローラに追加してください。
<?php function register(){ //debug('register'); if(isset($this->data)){ //debug('found data'); if($this->data['User']['password'] == $this->Auth->password($this->data['User']['password_confirm'])){ $this->User->create(); $this->User->save($this->data); $this->flash("ユーザー" . $this->data['User']['username'] . 'を登録しました', '/users/login'); }else{ //パスワードと確認用パスワードが一致しなかった場合 $this->flash('パスワードと確認用パスワードが一致していません', '/users/register'); } } }
app/views/users/register.ctp
<?php echo $form->create('User'); echo $form->input('username'); echo $form->input('password'); echo $form->input('password_confirm', array('type' => 'password')); echo $form->end('Register');
とりあえず、これで動作するかと思います。
次はvalidationを行おうかと思います。
なにか不備がありましたら、コメント欄によろしくお願いします。