Как проверить, вошел ли пользователь в систему с помощью ajax в Symfony?

Интересно, как лучше всего проверить, зарегистрирован ли пользователь в Symfony (4.x), используя запрос ajax xhr? В настоящее время я использую комбинацию действия контроллера (для обработки успешного ответа) и подписчика событий (чтобы предотвратить перенаправление на форму входа, если пользователь пытается получить доступ к действию контроллера, не войдя в систему). Есть ли лучший способ справиться с этим?

Не знаю для Symfony4, но раньше мы могли сделать что-то вроде stackoverflow.com/a/27382547/2375207

nicolallias 28.05.2019 12:19

Посмотрите это пожалуйста stackoverflow.com/questions/35125729/…

Jitendra Ahuja 28.05.2019 12:19

Также вы можете увидеть stackoverflow.com/questions/10271570/…

Jitendra Ahuja 28.05.2019 12:21

@nicolallias нет, это другой случай. И это не дубликат, вопрос, который вы связали, касается проверки без запроса ajax и не предотвратит перенаправление пользователя на форму входа.

Tom 28.05.2019 12:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
1 110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Currently I'm using combination of controller action (to handle success response)

Я предполагаю, что это что-то вроде этого

/**
 * @Route("/me/")
 */
public function meAction(): JsonResponse
{
    return new JsonResponse([
        'authenticated' => $this->getUser() !== null,
    ]);
}

event subscriber (to prevent redirection to login form if user is trying to access controller action while not logged in)

Вы можете просто добавить следующую строку в свой файл security.yml

access_control
    - { path: ^/me/$, role: IS_AUTHENTICATED_ANONYMOUSLY }

Обязательно добавьте его перед любыми другими проверками доступа, это сообщит брандмауэру о разрешении анонимного доступа для этого пути.

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

firewalls:
    secured_area:
        anonymous: true

Если вы не хотите разрешать анонимный доступ

нет ничего плохого в наличии anonymous: true, но если вы по какой-то причине не хотите его разрешать и при этом избегать редиректа - вы можете реализовать кастомный Входная точка

class XhrAuthenticationEntryPoint implements AuthenticationEntryPointInterface
{
    /**
     * {@inheritdoc}
     */
    public function start(Request $request, AuthenticationException $authException = null)
    {
        return new JsonResponse(
            ['authenticated' => false],
            200 // can be 200 or 401 up to you.
        );
    }
}

а потом добавить в свои конфиги

// services.yml
Security\XhrAuthenticationEntryPoint: ~

// security.yml
firewalls:
    secured_area: 
        entry_point: Security\XhrAuthenticationEntryPoint

Выглядит хорошо. Но как насчет случая, когда я не хочу иметь анонимный доступ? Понравилась клиентская зона? Допустим, у меня есть целевая страница, которая не должна находиться за брандмауэром, и защищенная область, которая находится за брандмауэром. Я хотел бы знать, вошел ли пользователь в защищенную область, которая всегда anonymous: false из области без брандмауэра. У меня есть веб-сайт с 4 различными брандмауэрами и одной незащищенной областью.

Tom 28.05.2019 15:26

@Tom, затем измените IS_AUTHENTICATED_ANONYMOUSLY на роль, которую вы хотите проверить.

Preciel 29.05.2019 00:26

Другие вопросы по теме