我希望能够通过通常的登录表单登录我的应用程序并使用 AJAX 直接将用户/密码发送到login_check
路径。
这个想法是当用户通过 AJAX 访问时返回Response
代码 200 或 400,具体取决于登录成功还是失败。
查看其他线程,我最终决定扩展默认处理程序DefaultAuthenticationSuccessHandler
并DefaultAuthenticationFailureHandler
实现这一点,导出为服务并success_handler
在我的安全区域的属性中指定。
文件服务.yml
服务:authentication.success_handler:类:%mycustom.authentication.success_handler.class% 参数:['@security.http_utils',{}] 公共:错误标签:-{ 名称:'monolog.logger',通道:'security' }
authentication.failure_handler:
class: %mycustom.authentication.failure_handler.class%
arguments: ['@http_kernel', '@security.http_utils', {}, '@logger' ]
public: false
tags:
- { name: 'monolog.logger', channel: 'security' }
文件安全性.yml
secured_meems_area:
pattern: ^/somrurl/
form_login:
login_path: /somrurl/login
check_path: /somrurl/api/login_check
success_handler: authentication.success_handler
failure_handler: authentication.failure_handler
require_previous_session: false
所有这一切似乎都有效,除了我的扩展处理程序的行为与原来的不同。在 Symfony 使用的默认实现中,如果您访问 apage/A
并且您没有登录,Symfony 会重定向到登录页面,然后您会再次重定向到page/A
. 但这不会发生在我的扩展处理程序中。
为了解决这个问题,我可以default_target_path
在将处理程序注册为服务时指定一个,但我想了解它为什么不遵循“正常”行为。
任何想法都在那里。
提前致谢。
解决方案 !!!
经过查看和测试,我在这里找到了一个解决方案Symfony2 扩展 DefaultAuthenticationSuccessHandler
这个想法是覆盖默认的 symfony 成功/失败处理程序,而不是定义我自己的并应用到 security.yml 文件中。
文件安全性.yml
secured_meems_area:
pattern: ^/somrurl/
form_login:
login_path: /somrurl/login
check_path: /somrurl/api/login_check
#
# DON'T USE !!!
#
# success_handler: authentication.success_handler
# failure_handler: authentication.failure_handler
#
require_previous_session: false
文件 service.yml。(注意安全性。在服务名称中)
services:
security.authentication.success_handler:
class: %mycustom.authentication.success_handler.class%
arguments: ['@security.http_utils', {} ]
public: false
tags:
- { name: 'monolog.logger', channel: 'security' }
security.authentication.failure_handler:
class: %mycustom.authentication.failure_handler.class%
arguments: ['@http_kernel', '@security.http_utils', {}, '@logger' ]
public: false
tags:
- { name: 'monolog.logger', channel: 'security' }
这样我们就可以用我们自己的覆盖默认实现,并且不需要在安全区域中指定处理程序。