symfony1.4.9で自作認証機能
2011年3月19日Symfony1.4.9で、sfGuardPluginを利用していたら、propel:build-modelが一切できなくなった。propel:build-sqlも同様。duplicateエラーを吐く。
そこで、簡単に自作してみた。
構成は、単純。
バックエンドへのアクセスを全て認証経由にするようにしただけ。
あくまでメモなので、全てを行って動作するかどうかは保証出来ません。。
$ symfony generate:module backend admin2
$ vim apps/backend/modules/admin2/templates/indexSuccess.php
login ログインID: <input type="text" name="uid" /> パスワード: <input type="password" name="password" /> <input type="submit" value="ログイン" />
$ vim apps/backend/modules/admin2/templates/secureSuccess.php
Login: getAttribute('username') ?> Last Login: getAttribute('last_logined_at') ?>
$ vim apps/backend/modules/admin2/actions/actions.class.php
getParameter('uid'); $password = $request->getParameter('password'); $c = new Criteria(); $c->add(AuthPeer::UID, $uid); $auth = AuthPeer::doSelectOne($c); if ($auth && $auth->getValid()) { if ($password == $auth->getPassword()) { $this->getUser()->setAuthenticated(true); $this->getUser()->addCredential('admin'); $this->getUser()->setAttribute('uid', $auth->getUid()); $this->getUser()->setAttribute('username', $auth->getUserName()); $this->getUser()->setAttribute('last_logined_at', $auth->getLastLoginedAt()); $auth->setLastLoginedAt(date('Y/m/d H:i:s', time())); $auth->save(); return $this->redirect($this->getRequestParameter('referer', '@secure')); } } return $this->redirect('enter_password'); } public function executeLogout(sfWebRequest $request) { $this->getUser()->setAuthenticated(false); $this->getUser()->clearCredentials(); return $this->redirect('enter_password'); } public function executeIndex(sfWebRequest $request) { } public function executeSecure(sfWebRequest $request) { } }
あとは、各設定ファイルをごにょごにょやっていく
$ vim apps/backend/config/security.yml default: is_secure: on .actions: login_module: admin2 login_action: index
あとは、バックエンドモジュール全てにsecuriry.ymlを作って、templates/layout.phpを変更、ルーティングを設定する程度。
案外あっさり完了。