Попередження : Перевірка на наявність 'IS_AUTHENTICATED_FULLY'
поодинці поверне значення false, якщо користувач увійшов, використовуючи функцію "Запам'ятати мене".
Згідно з документацією Symfony 2, є 3 можливості:
IS_AUTHENTICATED_ANONYMOUSLY - автоматично призначається користувачеві, який знаходиться в частині сайту, захищеному брандмауером, але який фактично не ввійшов у систему. Це можливо лише за умови дозволу анонімного доступу.
IS_AUTHENTICATED_REMEMBERED - автоматично призначається користувачеві, який пройшов аутентифікацію за допомогою файлу cookie запам'ятати мене.
IS_AUTHENTICATED_FULLY - автоматично призначається користувачеві, який вказав свої дані для входу протягом поточного сеансу.
Ці ролі представляють три рівні автентифікації:
Якщо у вас є IS_AUTHENTICATED_REMEMBERED
роль, то у вас також є IS_AUTHENTICATED_ANONYMOUSLY
роль. Якщо у вас є
IS_AUTHENTICATED_FULLY
роль, то у вас також є дві інші ролі. Іншими словами, ці ролі представляють три рівні збільшення "сили" автентифікації.
Я зіткнувся з проблемою, коли до користувачів нашої системи, які використовували функцію "Запам'ятати мене", ставились так, ніби вони взагалі не входили в систему на сторінках, які лише перевіряли 'IS_AUTHENTICATED_FULLY'
.
Тоді відповідь полягає у тому, щоб вимагати від них повторного входу, якщо вони не пройшли автентифікацію повністю, або перевірити запам'ятовувану роль:
$securityContext = $this->container->get('security.authorization_checker');
if ($securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
}
Сподіваємось, це врятує когось там від тієї самої помилки, яку я зробив. Я використав саме цю публікацію як посилання, коли шукав, як перевірити, чи хтось ввійшов у систему Symfony 2 чи ні.
Джерело: http://symfony.com/doc/2.3/cookbook/security/remember_me.html#forcing-the-user-to-re-authenticate-before-accessing-certain-resources