ログイン処理モジュール

モジュールLoginはログイン処理クラスです。ログイン処理は通常

処理からなります。以下、各処理に関するメソッドです。

ログインする

ログイン処理時に使用するメソッドです。

login(object $model, array $values, array $auth_column_names, bool $save_flag = FALSE)
認証し、ログインします。$modelで照合するテーブル(ユーザマスタなど)のモデルオブジェクトを、$valuesでユーザが入力したユーザ名やパスワードなどの値をレコード型の連想配列で、$auth_column_namesで照合対象のカラム名の組み合わせを配列で指定します。認証に成功したらTRUEを、失敗したらFALSEを返します。 通常はログインフォームの入力値をフォームクラスから取得し、それを$valuesとして設定します。パスワードなど暗号化が必要な変数についてはデータベースに格納されているのと同じ形式で暗号化して$valuesに上書きします。
$auth_column_namesで照合対象とするカラム名を以下の形式で指定します。
$auth_column_names = array(
	'mail_address',
	'password',
);
$save_flagをTRUEにすると、設定ファイル{(app_root), _common}/configs/Login.phpsave_cookie_lifetimeで設定した有効期間だけ、Cookieを使用してログイン情報をブラウザに保存します。FALSEの場合、ログイン情報をCookieに保存しません。
メソッドを実行すると連想配列$valuesのキーと一致したカラム(上記の例ではmail_addresspassword)についてのみ照合し、すべて符合したら認証が完了します。
redirectSrcUrl()
ログイン直前のURLにリダイレクトします。ログインしていない状態でログインが必要な画面に遷移したときログイン画面にリダイレクトされますが、その時の「ログインが必要な画面」のURLになります。
saveSrcUrl(string $url)
redirectSrcUrl()で戻す先のURLを上書きします。不適切なURLを指定するとredirectSrcUrl()を実行した時に不適切なページにリダイレクトされます。

具体的にログインフォームから受け取った値で認証する処理は以下のようになります。

<?
final class ctrlLogin extends CZCtrl {

	public function _init() {
		// ログインフォームを初期化
		$this->newForm('login')->initValues();
	}
	
	public function actionIndex() {
		// ログインフォームを表示
		$this->addViewVar('form_html', $this->newForm('login')->getFormHtml(), FALSE);
	}
	
	public function actionCommit() {
		// 直前のアクションをチェック(不正アクセス対策)
		$this->checkPrevActions(array(
			array('index'),
		));
		
		// フォームクラスを呼び出し、フォームの値を受け取る
		$form = $this->newForm('login');
		
		if (!$form->saveValuesByPost()) {
			$this->redirect(array('index'));
		}
		$login_module = $this->newModule('login');
		

		// フォームの値を「$form_values」に格納し、パスワードは md5() で暗号化する
		$form_values = $form->loadValues();
		$form_values['pass'] = md5($form_values['pass']);

		// メソッド「login()」の引数を指定
		$model             = $this->newModel('v_valid_user');
		$auth_column_names = array(
			'mail_addr',
			'pass',
		);

		// ログイン処理。認証に失敗したらグローバルエラーメッセージに
		// その旨を格納し、インデックスにリダイレクトする
		if (!$login_module->login($model, $form_values, $auth_column_names)) {
			$this->newModule('err')->save('認証に失敗しました。');
			$this->redirect(array('index'));
		}
		
		// フォームの入力値をクリアする
		$form->freeAll();
		
		// ログイン元の画面に戻す
		$login_module->redirectSrcUrl();
	}
}
?>

ログインされているか確認する

認証が必要なページ(マイページ等)ではログインされている状態かどうかを確認します。

isLoggedIn($condition_values = array())
実行時にログインされていればTRUE、されていなければFALSEを返します。ただし設定ファイル{(app_root), _common}/configs/Login.phpauto_redirectが設定されていると、 非ログイン時にはFALSEを返さずに指定のアクションにリダイレクトされます。
ユーザ種別(権限)等により絞り込みを行う場合(「管理者のみ」「管理者+出品者」など)、$condition_valuesで条件を指定します。形式はキーを認証テーブルのカラム名、値を対応する条件値とする連想配列となります。
$condition_values = array(
	'user_type' => 1,
);
getId()
現在ログインしているユーザIDを返します。
getValues($format_flag = TRUE)
ログインしたユーザの情報をユーザマスタ(ログイン時に指定したモデル)から取得し、レコード形式で返します。ユーザの情報はログイン認証時のものとなります。
relogin($model)
ログインしたユーザの情報をユーザマスタ(ログイン時に指定したモデル)から取得し、レコード形式で返します。ユーザの情報はこのメソッドを実行時のものとなります。

実装方法としては認証が必要なコントローラの_common()等に入れておきます。

<?
class ctrlSlot extends CZCtrl {

	// 共通処理
	public function _common() {
		$this->newModule('login')->isLoggedIn();
	}
		:

	// 各メソッド
}
?>

ログアウトする

logout()
ログアウトします。

ログアウトの具体的な実装例です。

<?
class ctrlLogout extends CZCtrl {
	// ログインされているかどうか確認
	public function _common() {
		$this->newModule('login')->isLoggedIn();
	}
	
	// ログアウトボタンを表示させる(以下の「actionCommit()」へのリンク)アクション
	public function actionIndex() {}
	
	// ログアウト処理を行うアクション
	public function actionCommit()
	{
		// 正しい画面(actionIndex())から来たかどうかチェック
		$this->checkPrevActions(array(
			array('index'),
		));

		// ログアウト処理
		$this->newModule('login')->logout();
		
		// トップに飛ばす
		$this->redirectRoot();
	}
}
?>

前後のページ

ページトップへ