Автоматическая аутентификация пользователя
sfGuard хороший плагин, но для того чтобы он мог авторизировать пользователя автоматически при заходе на страницу, нужно немного подшаманить.
1. Авторизация без формы
Если например, нужно авторизировать по ссылке. Тут все просто:
$this->getUser()->signin($user);
2. Авторизация в «секурных» модулях и экшенах.
Например, у нас админка вынесена в другое приложение и не хочется постоянно вводить логин и пароль то рецепт такой.
factories.yml
all: storage: class: sfSessionStorage param: session_cookie_lifetime: 1296000 #на 15 дней.
filters.yml:
security: class: sfGuardBasicSecurityFilter
3. Авторизация в «несекурных» модулях
Например, у вас на фронтенде висит форма авторизации. чтобы не вводить данные постоянно нужно чтобы пользователь был аутентифицирован автоматически при заходе на страницу.
(метод подсмотрен здесь)
Нам поможет sf_guard_remember_key. Для этого создалим такой фильт:р
<? class RememberFilter extends sfFilter { public function execute ($filterChain) { if ($this->isFirstCall() AND !$this->getContext()->getUser()->isAuthenticated()) { if ($cookie = $this->getContext()->getRequest()->getCookie(sfConfig::get('app_sf_guard_plugin_remember_cookie_name', 'sfRemember'))) { $c=new Criteria(); $c->add(sfGuardRememberKeyPeer::REMEMBER_KEY, $cookie); $remember_key=sfGuardRememberKeyPeer::doSelectOne($c); if ($remember_key) { $user_id = $remember_key->getUserId(); $user = sfGuardUserPeer::retrieveByPK($user_id); if ($user instanceof sfGuardUser) { $this->getContext()->getUser()->signIn($user); } } } } $filterChain->execute(); } } ?>
и пропишем его в filters.yml
remember: class: RememberFilter
Теперь когда пользователь будет ставить галочку «запомнить меня» — он будет авторизироваться автоматически при следующих заходах.
Вы можете оставить комментарий или подписаться на RSS feed
Коментарии
// Begin Comments & Trackbacks ?>Нет коментариев.
Leave a comment