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
[html]
login
ログインID:
パスワード:
[/html]
$ vim apps/backend/modules/admin2/templates/secureSuccess.php
[html]
Login: getAttribute(‘username’) ?>
Last Login: getAttribute(‘last_logined_at’) ?>
[/html]
$ vim apps/backend/modules/admin2/actions/actions.class.php
[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)
{
}
}
[/php]
あとは、各設定ファイルをごにょごにょやっていく
[shell]
$ vim apps/backend/config/security.yml
default:
is_secure: on
.actions:
login_module: admin2
login_action: index
[/shell]
あとは、バックエンドモジュール全てにsecuriry.ymlを作って、templates/layout.phpを変更、ルーティングを設定する程度。
案外あっさり完了。