重定向到ajax请求的登录页面

重定向到ajax请求的登录页面,ajax,symfony,Ajax,Symfony,对于我的项目中的身份验证,我使用了两种方法:form_login和Cas与单个提供者(用户)。 我在security.yml中设置了登录表单,并为Cas创建了一个守卫。 经过多次测试,我成功地使这两个身份验证共存。 现在我开始在页面中添加ajax,我遇到了一个新问题:我所有的ajax调用都被重定向到登录页面。 由于我所有的ajax路由都是以/api/开头的,所以我尝试将security.yml放入其中 - {path: ^/api, roles: IS_AUTHENTICATED_ANONYMO

对于我的项目中的身份验证,我使用了两种方法:form_login和Cas与单个提供者(用户)。 我在security.yml中设置了登录表单,并为Cas创建了一个守卫。
经过多次测试,我成功地使这两个身份验证共存。
现在我开始在页面中添加ajax,我遇到了一个新问题:我所有的ajax调用都被重定向到登录页面。
由于我所有的ajax路由都是以/api/开头的,所以我尝试将security.yml放入其中

- {path: ^/api, roles: IS_AUTHENTICATED_ANONYMOUSLY}
   ...
   firewalls:
      dev:
          pattern: ^/(_(profiler|wdt)|css|images|js)/
          security: false

    login_firewall:
        pattern:   ^/login$
        anonymous: true
    main:
        pattern:    ^/
        anonymous: false
        form_login:
            provider: database
            login_path: login
            check_path: login_check
            csrf_token_generator: security.csrf.token_manager
            csrf_token_id: bien_authentifie
            always_use_default_target_path: true
            default_target_path: home
        logout:
             path:   caslogout
             target: https://xxx.xxxx.nnn/cas/logout
        switch_user: true
        guard:
             provider: database
             authenticators:
               - xxx.cas_authenticator


access_control:
  - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
  - { path: ^/api, roles: IS_AUTHENTICATED_ANONYMOUSLY }
  - { path: ^/admin/, roles: ROLE_ADMIN }
  - { path: ^/, roles: ROLE_USER }
但我仍然被重定向到登录页面

3天以来我一直在寻找解释,但我还没有找到

我的安全

- {path: ^/api, roles: IS_AUTHENTICATED_ANONYMOUSLY}
   ...
   firewalls:
      dev:
          pattern: ^/(_(profiler|wdt)|css|images|js)/
          security: false

    login_firewall:
        pattern:   ^/login$
        anonymous: true
    main:
        pattern:    ^/
        anonymous: false
        form_login:
            provider: database
            login_path: login
            check_path: login_check
            csrf_token_generator: security.csrf.token_manager
            csrf_token_id: bien_authentifie
            always_use_default_target_path: true
            default_target_path: home
        logout:
             path:   caslogout
             target: https://xxx.xxxx.nnn/cas/logout
        switch_user: true
        guard:
             provider: database
             authenticators:
               - xxx.cas_authenticator


access_control:
  - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
  - { path: ^/api, roles: IS_AUTHENTICATED_ANONYMOUSLY }
  - { path: ^/admin/, roles: ROLE_ADMIN }
  - { path: ^/, roles: ROLE_USER }
我发现:c)
很明显,
anonymous:false
是问题所在,它必须是
anonymous:~

访问控制工作通过匿名身份验证

,根据这一点:
-{path:^/,roles:ROLE\u USER}
,应用程序的所有路径都位于防火墙后面。我想这就是为什么api调用重定向到登录。将其更改为匿名身份验证,可能会解决此问题,但我的所有ajax url都以/api/开头。。。我在访问控制中有-{path:^/api,roles:IS_AUTHENTICATED_ANONYMOUSLY}。那就可以了不?我只是在我的一个应用程序上做了一个快速测试,是的,如果你把“/”放在防火墙后面,你所有的URL都会重定向到登录页面进行身份验证。谢谢你的帮助,但正如你可以检查的那样,对于访问控制的使用,{path:^/api,roles:IS_AUTHENTICATED_匿名}在{path:^/,roles:ROLE_USER}之前当我调用a/api/…时将使用它。。。网址。我没有在我的问题中解释它,但我尝试制作一个“内联网”,这样除了登录表单之外,所有东西都会隐藏在防火墙后面。事实上,我正在学习Ajax,即使它没有受到保护,在我需要保护它之后也没关系。