symfony - 安全访问控制 : specific return (json) if ajax

标签 symfony

我正在使用 access_control (securiry.yml) 来控制对我的页面的访问。像那样:

- { path: ^/, roles: ROLE_USER }

如果未连接的用户尝试访问,他将被重定向。好的,很好。
但是有些 url 可以与 Ajax 一起使用。我希望 access_control 在这种情况下返回一个 json 数据(未连接)。
是否可以 ?

最佳答案

你必须自己写AuthenticationHandler它将实现以下两个接口(interface):

class AuthenticationHandler implements AuthenticationFailureHandlerInterface, 
                                       AuthenticationSuccessHandlerInterface

在该处理程序中,您应该定义两个方法 onAuthenticationFailure()onAuthenticationSuccess()
在它们里面检查是否$request->isXmlHttpRequest()
    if ($request->isXmlHttpRequest()) {
        ...
        return new Response($json);
    } else {
        ...
        return new RedirectResponse($url);
    }

别忘了在 security.yml 中设置你的监听器。
firewalls:
    main:
        ....
        your_form_login:
            ...
            failure_handler: your.authentication_handler
            success_handler: your.authentication_handler

关于symfony - 安全访问控制 : specific return (json) if ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141625/

相关文章:

symfony - 在 symfony 中记录 fatal error

php - createQueryBuilder 条件 oneToMany

windows - Selenium 服务器 : Unexpected status SERVICE_PAUSED

symfony - 如何在 Symfony2 中设置 Twig 模板的默认日期格式?

php - Symfony3 : is it possible to change the name of a form?

symfony - Symfony2安全性: Multiple providers

ubuntu - Doctrine :database:create 时出现 Symfony 错误

symfony - Doctrine2 在多个级别上左连接发出多个请求

Symfony3 + Twig : Join array with <br/>

php - 将变量发送到 Symfony 模板文件