Jun 16

逆引きrhaco73: 認証をDBで行う

rhacoはデフォルトでxmlを用いた認証処理を使えます。・・・とここまで書いたところでこの機能を逆引きに書いてませんでした!><すいません。後日書きます。

ただ、認証にDBを使いたいケースも多いと思います。その場合もrhacoならば非常に柔軟かつ手軽に作ることが出来ます。

DBで認証を行うにはnetwork.http.model.RequestLoginConditionDbを使います。
実際の認証処理は認証処理を行いたいモデルで行います。

__init__.phpなどに以下の内容を書きます。

Rhaco::import("network.http.RequestLogin");
Rhaco::import("network.http.model.RequestLoginConditionDb");
RequestLogin::loginRequired(new RequestLoginConditionDb($db,new Hoge()));


たった三行です。

次にHogeモデル(library.model.Hoge)に実際の認証処理を書きます。メソッド名はloginConditionで、true, falseを返すことで認証チェックが出来ます。

loginCondition(&$db, &$var, $request)
$db: Hoge::connection()で接続したDbUtilsオブジェクト
$var: $varをメソッド内でセットすることで、その値をRequestLogin::getLoginSession()で取り出すことが出来ます。
$request: ログイン時のリクエスト情報(Requestオブジェクト)。$request->getVariable("name");でリクエスト情報を取り出せます


Hoge.php(該当箇所のみ)
function loginCondition(&$db, &$var, $request){
  $user = $request->getVariable("login");
  $pass = $request->getVariable("password");
  $var = $db->get($this,new C(
    Q::eq($this->columnUser(),$user),
    Q::eq($this->columnPass(),$pass)
  ));
  return V::istype($this,$var);
}

※前もってuserとpassカラムをHogeクラスに用意しておく必要があります。

これでHogeクラスのuser, passカラムに入力したデータがあるものを取得し、データがあれば認証OKというDBを用いた認証を作ることが出来ました。そして認証後、

$hoge = RequestLogin::getLoginSession();

とすることで、getしたHogeクラスの内容を参照することが出来ます。

このようにrhacoを用いると非常に柔軟に認証処理を作ることが出来ます。会員、管理者の区別なども手軽に導入できます。

| comment(0)