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

Php 如何检查用户是否在Symfony中使用ajax登录?,php,symfony,authentication,Php,Symfony,Authentication,我想知道什么是检查用户是否使用AJAXHR请求登录Symfony(4.x)的最佳方法?目前,我使用控制器操作(处理成功响应)和事件订阅者(如果用户在未登录时尝试访问控制器操作,则防止重定向到登录表单)的组合。有没有更好的方法来处理这个问题 目前我正在使用控制器操作的组合(处理成功响应) 我猜是这样的 /** * @Route("/me/") */ public function meAction(): JsonResponse { return new JsonResponse([

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

目前我正在使用控制器操作的组合(处理成功响应)

我猜是这样的

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

然后将其添加到您的配置中

// services.yml
Security\XhrAuthenticationEntryPoint: ~

// security.yml
firewalls:
    secured_area: 
        entry_point: Security\XhrAuthenticationEntryPoint
目前我正在使用控制器操作的组合(处理成功响应)

我猜是这样的

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

然后将其添加到您的配置中

// services.yml
Security\XhrAuthenticationEntryPoint: ~

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

对于Symfony4不知道,但是之前我们可以做一些类似的事情,请看这个,你也可以看@nicolallias nope,这是另一个例子。这不是重复的,您链接的问题是关于在没有ajax请求的情况下进行检查,并且不会阻止用户重定向到登录表单不知道Symfony4,但之前我们可以做一些类似的事情,请参见@nicolallias nope,这是另一种情况。这不是重复的,您链接的问题是关于在没有ajax请求的情况下进行检查,并且不会阻止用户重定向到登录表单。但是当我不想匿名访问时,情况又如何呢?比如客户区?假设我有一个不应该在防火墙后面的登录页和防火墙后面的安全区域。我想知道用户是否从非防火墙区域登录到安全区域,该区域总是
匿名:false
。我的网站有4个不同的防火墙和一个不受保护的区域。@Tom然后将
匿名身份验证更改为您要检查的角色。看起来不错。但是当我不想匿名访问时,情况又如何呢?比如客户区?假设我有一个不应该在防火墙后面的登录页和防火墙后面的安全区域。我想知道用户是否从非防火墙区域登录到安全区域,该区域总是
匿名:false
。我的网站有4个不同的防火墙和一个非保护区。@Tom然后将
匿名身份验证更改为您要检查的角色。