php - 如何检查用户是否在 Symfony 中使用 ajax 登录?
问题描述
我想知道如何检查用户是否使用 ajax xhr 请求登录 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
,但是如果由于某种原因您不想允许它并且仍然避免重定向 - 您可以实现自定义入口点
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
推荐阅读
- python - Django Rest Framework OPTIONS 请求 - 包括初始/默认选项
- react-native - React Navigation - 从导航状态中移除组件并导航到 Screen
- android - 如何在发布版本上调试谷歌地图
- ab-initio - 使用 ab initio write HDFS 组件创建零记录拼花文件
- python - 使用python将PDF文件插入word文档
- reactjs - React Router Dom 在网站加载时更改 URL
- jboss - JBPM 7.43:如何动态处理 ListBox 中选定的更改项?
- javascript - Next.js 在 next.config.js 中动态重定向
- excel - 如何使用 VBA 将指定日期的 Outlook 中的 HTML 表格导入 Excel?
- spring-boot - 带有 vaadin 的 spring boot 需要几分钟才能启动