Автоматическая аутентификация пользователя

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

Коментарии

Нет коментариев.

Leave a comment

(обязательно)

(обязательно)