rhaco: RequestLoginを拡張したRequestLoginExt
RequestLoginクラスは思った以上に拡張性がなかったので拡張しました。
http://api.rhaco-users.jp/d8/dd3/RequestLogin_8php-source.html
データベースにはusersテーブルにemail, passwordが必要という設定です。ログイン状態を保存するという機能を実装するためにsetcookie(checkbox)というRequestを投げてやればよいようになっています。ログインが必要なシステム制作の際に役に立つでしょう。 RequestLoginExtを使う際にはRequestLoginDbExtを必要とします。RequestLoginDbExtも同時にのせときます。
RequestLoginExt
class RequestLoginExt extends RequestLogin{ var $login_session; function setLoginCookie($value, $expire=''){ if(!$expire) $expire = time() + Rhaco::constant("COOKIE_EXPIRE_TIME",1209600); setcookie( RequestLogin::getSessionLoginName(), $value, $expire, '/' ); } function logout($requestLoginCondition){ $this->silent($requestLoginCondition); unset($_SESSION[RequestLogin::getSessionLoginIdName()]); unset($_SESSION[RequestLogin::getSessionLoginName()]); $this->clearSession(); $this->login_session = null; setcookie(RequestLogin::getSessionLoginName(),"", time() - 1209600, '/'); } function login_require($requestLoginCondition, $tableObject, $redirect=''){ $this->logout($requestLoginCondition); $this->login(new RequestLoginConditionDbExt($requestLoginCondition, $tableObject)); if($this->isLogin()) { $this->login_session = $this->getLoginSession(); if( $this->getVariable('setcookie') ){ $this->setLoginCookie($this->login_session->password); } // When user has authed. $redirect ? Header::redirect($redirect) : Header::redirect(Rhaco::url()); } } function login_silent($requestLoginCondition, $tableObject){ $this->silent($requestLoginCondition); $this->login_session = $this->getLoginSession(); if( !$this->login_session and $this->isLoginCookie() ){ $this->silent($requestLoginCondition); $this->logout(); $this->login(new RequestLoginConditionDbExt($requestLoginCondition, $tableObject)); $this->login_session = $this->getLoginSession(); if(!$this->login_session) return false; $this->setLoginCookie($this->login_session->password); } } }
RequestLoginDbExt
class RequestLoginConditionDbExt extends RequestLoginConditionDb{ function invalid($request){ if(!Variable::istype("Request",$request)){ $request = new RequestLoginExt(); } $this->_invalidForword($request); } function _invalidForword($request){ $htmlParser = new HtmlParser(); $login = $request->getVariable("email"); $request->clearVariable("password","email","args"); $htmlParser->setVariable("requestvar",$request->getVariable()); $template = Rhaco::rhacoresource("templates/network/login.html"); if(FileUtil::exist(Rhaco::templatepath("network/login.html"))) $template = Rhaco::templatepath("network/login.html"); $htmlParser->write($template); Rhaco::end(); } }