Symfony 4 - перенаправить пользователя после того, как логин не активен - PullRequest
0 голосов
/ 28 сентября 2018

Я использую Symfony 4.1 и хочу перенаправить пользователя на страницу входа, если он не активен (поле в моей БД).

Итак, я создал UserChecker клиента:

class UserChecker implements UserCheckerInterface
{
    /**
     * @var RouterInterface
     */
    private $router;

    /**
     * UserChecker constructor.
     * @param RouterInterface $router
     */
    public function __construct(RouterInterface $router)
    {
        $this->router = $router;
    }

    /**
     * @param UserInterface $user
     * @return bool|void
     */
    public function checkPreAuth(UserInterface $user)
    {
        if (! $user instanceof User) {
            return;
        }

        // user is not active
        if ($user->getActive() == 0) {
            return new RedirectResponse($this->router->generate('login'));
            //throw new AccessDeniedHttpException("Account not active");
        }
    }
    ....

Но мой пользователь не перенаправлен, исключение работает, но я хочу перенаправить его только с помощью специального сообщения (я буду использовать Flash Session).

Как я могу это сделать?Документы Symfony предоставляют только сообщения об исключениях, но они не являются достаточно гибкими для меня.

1 Ответ

0 голосов
/ 28 сентября 2018

В моем UserChecker у меня есть эти две проверки:

    if ($user->isAccountLocked($maxMinutesLocked)) {
        $ex = new LockedException('User account is locked.');
        $ex->setUser($user);
        throw $ex;
    }

    if (!$user->isEnabled()) {
        $ex = new DisabledException();
        $ex->setUser($user);
        throw $ex;
    }

Итак, я думаю, ваш $user->getActive() == 0 будет таким же, как мой !$user->isEnabled().

Я думаю, вам просто нужнобросить DisabledException и вы снова попадете на страницу входа в систему.

Надеюсь, вам пригодится этот ответ, на самом деле я не специалист в этой области.

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