rhaco: ユーザ認証実装 with cookie(最小ソース)
project.xml
<project rhacover="1.6.1" version="0.0.1" name="userauth" xmlns="http://rhaco.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://rhaco.org http://m.rhaco.org/xsd/project_1_6_x.xsd"> <database name="userauth"> <table name="users" admin="true"> <column name="id" type="serial" /> <column name="user" type="string" size="50" require="true" /> <column name="pass" type="string" require="true" /> </table> </database> </project>
__init__.php
include_once("./__settings__.php"); Rhaco::import("database.DbUtil"); Rhaco::import("model.Users"); Rhaco::import("network.http.RequestLogin"); Rhaco::import("network.http.model.RequestLoginConditionDb"); $users_db = new DbUtil(Users::connection());
model/Users.php
Rhaco::import("model.table.UsersTable"); class Users extends UsersTable{ 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); } function loginConditionCookie(&$db, &$var, $cookiekey){ $oauth_id = $cookiekey; $var = $db->get($this,new C( Q::eq($this->columnId(), $oauth_id) )); return V::istype($this, $var); } }
index.php
require('__init__.php'); RequestLogin::login( new RequestLoginConditionDb($users_db, new Users()) ); $login_session = RequestLogin::getLoginSession(); if(!$login_session) Header::redirect(Rhaco::url().'login.php'); var_dump($login_session);
logout.php
require('__init__.php'); RequestLogin::silent($users_db); RequestLogin::logout(); Header::redirect('index.php');
login.php
require('__init__.php'); RequestLogin::login(new RequestLoginConditionDb($users_db, new Users())); if(RequestLogin::isLogin()) { $session_log = RequestLogin::getLoginSession(); RequestLogin::setLoginCookie($session_log->id); Header::redirect(Rhaco::url()); }