如何检查用户是否在Symfony中使用Ajax登录?

时间:2019-05-28 10:15:26

标签: php symfony authentication

我想知道如何使用ajax xhr请求检查用户是否已登录Symfony(4.x)的最佳方法是什么?目前,我正在使用控制器动作(以处理成功响应)和事件订阅者(如果用户试图在未登录时尝试访问控制器动作,则防止重定向到登录表单)的组合。有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

当前,我正在使用控制器动作(以处理成功响应)的组合

我认为是这样的

/**
 * @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并没有错,但是如果出于某些原因您不想允许它并且仍然避免重定向,则可以实现自定义Entry Point

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