7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Cake PHP2.x】ログイン機能の実装

Last updated at Posted at 2020-07-16

今回はタイトルにもある通りCakePHPでのログイン機能について解説していきたいと思います。

尚、私が参考にしたサイトは以下のCakePHP Cook bookです。
是非こちらも見ていただければより一層理解が深まると思います。

【CakePHP Cook book】
https://book.cakephp.org/2/ja/tutorials-and-examples/blog-auth-example/auth.html

気を付けるポイント

CakePHPはそのルールの独特さ故に最初は戸惑うポイントがありますが、 とにかく開発スピードが速い(ひな形の時点でほぼ完成に近いものがそろう)ので、コードのパターンを見つけると他の機能の実装も早くなると思います。

コントローラー処理

では早速書いていきましょう。CakeではAppControllerに会員登録やログインログアウト処理を記述します。具体的にここではリダイレクト先、Blowfishを使いパスワードのハッシュ化等の処理を行います。
AppController.php
<?php
App::uses('Controller', 'Controller');

class AppController extends Controller {
	public $components = array(
		'DebugKit.Toolbar' => array('panels' => array('history' => false)),
		'Flash',
        'Session',
        //ログイン後、ログアウト後にどのような処理を行うか
		'Auth' => array(
			'loginRedirect' => array(
                //UsersControllerに記述したログイン処理
				'controller' => 'users',
				'action' => 'login'
            ),
            //UsersControllerに記述したログアウト処理
			'logoutRedirect' => array(
				'controller' => 'submits',
				'action' => 'index',
				'home'
            ),
            //パスワードのハッシュ化
			'authenticate' => array(
				'Form' => array(
					'userModel' => 'User',
					'passwordHasher' => 'Blowfish',
					'hashType' => 'md5',
					'fields' => array(
						'username' => 'email',
						'password' => 'password'
					)
				)
			),
			'authorize' => array('Controller')
		)
	);

	public $helpers = array('Html', 'Form', 'Session');
	public function beforeFilter() {
		$this->Auth->allow('index', 'view');
		//ログイン者の名前表示する
		$this->set('auth', $this->Auth->user());
		//メールアドレスでログインするためカラム切り替え
		$this->Auth->authenticate = array(
			'Form' => array(
				'fields' => array('username' => 'email', 'password' => 'password')
			)
		);
	}

	public $settings = array(
		'fields' => array(
			'username' => 'username',
			'password' => 'password'
		),
		'userModel' => 'User',
		'userFields' => null,
		'scope' => array(),
		'recursive' => 0,
		'contain' => null,
		'passwordHasher' => 'Blowfish'
	);
}
?>

次はUsersControllerを記述していきます。

UsersController.php
<?php
//AppController使いますよーという宣言
App::uses('AppController', 'Controller');

class UsersController extends AppController {
    //どのヘルパーとコンポーネントを使うか
	public $helpers = array('Html', 'Form', 'Flash');
	public $components = array('Flash', 'Auth');

	public function beforeFilter() {
        //未ログイン者が見れるページ(それ以外はリダイレクト先に飛ぶ)
		parent::beforeFilter();
		$this->Auth->allow('add', 'login', 'logout');
	}

	public function add() {
        //postで送られてきた情報をユーザーテーブルに保存
		if ($this->request->is('post')) {
			$this->User->create();
			if ($this->User->save($this->request->data)) {
				$this->Flash->success(__('会員登録が完了しました'));
				return $this->redirect(array(
					'controller' => 'submits', 'action' => 'index')
				);
			}
			$this->Flash->error(__('登録に失敗しました。再度お試しください'));
		}
	}

	public function login() {
        //送られてきた情報と比べログイン処置
        //ここでハッシュ化されたパスワードと比べる
		if ($this->request->is('post')) {
			if ($this->Auth->login()) {
				$this->Flash->success(__('ログインに成功しました'));
				return $this->redirect($this->Auth->redirect(array(
					'controller' => 'submits', 'action' => 'index'))
				);
			}
			$this->Flash->error(__('メールアドレスもしくはパスワードが違います'));
		}
	}

	public function logout() {
        //ログアウト処理 今回は投稿一覧に飛ぶようにしています。
		if ($this->Auth->login()) {
			$this->Flash->success(__('ログアウトしました'));
			$this->redirect($this->Auth->logout(array(
				'controller' => 'submits',
				'action' => 'index'))
			);
		}
		$this->redirect($this->Auth->redirect(array(
			'controller' => 'submits',
			'action' => 'index'))
		);
	}
}
?>

以上がCakePHPでのログイン機能の実装のフローになります!
CakePHPはMVCに分かれており、どこでエラーが出ているのか一目でわかるので、
少しづつコードを書いてはエラーが出ていないか確認する事が機能実装の近道だと思います!

復習も兼ねて他の機能実装についても記事を書く予定です。お疲れ様でした。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?