Безопасность и вход в проект на основе Symfony 2 - PullRequest
3 голосов
/ 16 ноября 2011

Я занимаюсь разработкой веб-приложения на основе PHP-фреймворка Symfony 2.

Имеется страница входа для зарегистрированных пользователей. Я хочу выполнить некоторую пользовательскую логику для каждого пользователя, входящего в систему.

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

Я также хочу реализовать функцию, которая вызывается, когда пользователь входит в систему, чтобы я мог решить, будет ли доступ предоставлен или нет для любого пользователя (на основании полного набора информации, хранящейся в базе данных пользователя).

Как мне этого добиться?

1 Ответ

10 голосов
/ 16 ноября 2011

Что касается первой части вашего вопроса, у меня было нечто подобное (например, сохранить последнюю дату и время входа пользователя).Я пошел по маршруту службы, которая была запущена на случай.В вашей конфигурации служб (пример XML):

<services>

    <service id="my.login.listener" class="My\OwnBundle\Event\LoginEventListener">
      <tag name="kernel.event_listener" event="security.interactive_login" />
    </service>

</services>

и затем создайте вышеупомянутый класс в соответствующем месте в вашем комплекте:

namespace My\OwnBundle\Event;

use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use My\OwnBundle\User\User as MyUser;

class LoginEventListener
{
    /**
     * Catches the login of a user and does something with it
     *
     * @param \Symfony\Component\Security\Http\Event\InteractiveLoginEvent $event
     * @return void
     */
    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
    {
        $token = $event->getAuthenticationToken();
        if ($token && $token->getUser() instanceof MyUser)
        {
            // You can do something here eg
            // record the date & time of the user's login
        }
    }
}

Я мог бы представить, что вы можете расширитьэто ко второй части вашего вопроса, однако я не сделал этого: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...