2013-08-03 3 views
7

Я реализовал функцию входа в систему программно.Как реализовать помните меня программно в symfony2?

Этот код выглядит следующим образом:

$token = new UsernamePasswordToken($user, $user->getPassword(), 'main', $user->getRoles()); 
$this->get('security.context')->setToken($token); 

$event = new InteractiveLoginEvent($this->getRequest(),$token); 
$this->get('event_dispatcher')->dispatch('security.interactive_login', $event); 

После этого, как я реализую меня помните?

(Я знаю, как использовать форму, но я хочу реализовать помню меня программно.)

пожалуйста, помогите ...

+0

Вы можете проверить [этот вопрос] (http://stackoverflow.com/questions/549) для общей картины. – HamZa

ответ

8

Попробуйте использовать RememberMeToken

$key = $this->getParameter('secret'); // your security key from parameters.yml 

$token = new RememberMeToken($user, 'main', $key); 
$this->get('security.context')->setToken($token); 
+0

Я пытаюсь сделать логин в facebook. Это вход в систему, но не создает cookie. '$ token = new RememberMeToken ($ user, 'default', $ this-> getParameter ('secret')); $ this-> Get ('security.token_storage') -> setToken ($ лексема), ' В моем security.yml: ' безопасности: брандмауэров: по умолчанию: Remember_Me: ключ: «% секрет % ' срок службы: 31536000 always_remember_me: true' – SebCar

0

Вы можете создать печенье с уникальным ID. Затем сохраните этот файл cookie в базе данных и проверьте эту базу данных всякий раз, когда новый посетитель посещает сайт. Если у вас есть ваши пользователи, которые хранятся в базе данных, было бы лучше сделать дополнительный столбец для хранения этой информации. Посмотрите на FOSUserBundle, кстати.

1

У меня была такая же проблема. Вы должны использовать RememberMeToken вместо UsernamePasswordToken.

Параметры класса очень похожи на UsernamePasswordToken, поэтому я не вдаваюсь в подробности.

0

Я использовал тот же метод, как forgottenbas предложил, но получил сообщение об ошибке. Я должен был использовать $ this-> контейнер (Symfony2):

$key = $this->container->getParameter('secret'); 

$token = new RememberMeToken($user, 'user_area', $key); 
$this->get('security.context')->setToken($token); 

$ пользователь является экземпляром моего класса User и 'user_area' это имя моего брандмауэра.

 Смежные вопросы

  • Нет связанных вопросов^_^