Как проверить, вошел ли пользователь с помощью ajax в Symfony? - PullRequest
0 голосов
/ 28 мая 2019

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

1 Ответ

2 голосов
/ 28 мая 2019

В настоящее время я использую комбинацию действий контроллера (для обработки успешного ответа)

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

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

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

Вы можете просто добавить следующую строку в свой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...