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