如何在API Platform中通过实体注解将单个端点设置为公开访问
原因说明
你当前配置不生效的核心原因是Symfony全局安全规则的优先级高于API Platform实体注解的安全配置。你在security.yaml中配置的{ path: ^/, roles: IS_AUTHENTICATED_FULLY }会先匹配所有请求,未登录的请求会被全局安全层直接拦截,根本不会执行到API Platform的注解校验逻辑,所以实体上的PUBLIC_ACCESS配置不会生效。
仅通过实体注解实现需求的方案
可以实现,只需要调整全局安全配置,把权限校验的控制权交给API Platform的安全系统即可,步骤如下:
- 修改
security.yaml的access_control配置,删除全局全路径认证规则,仅保留必须的公开路径:
access_control: - { path: ^/docs, roles: PUBLIC_ACCESS } # 允许访问Swagger文档 - { path: ^/authentication_token, roles: PUBLIC_ACCESS } # 允许登录接口访问 # 删掉原来的 { path: ^/, roles: IS_AUTHENTICATED_FULLY } 规则
- 为了避免其他接口意外暴露,在API Platform全局配置
config/packages/api_platform.yaml中添加默认安全规则,所有接口默认需要登录认证:
api_platform: defaults: security: 'is_granted("IS_AUTHENTICATED_FULLY")' security_message: '请先登录后再访问接口'
- 你原来User实体上的POST操作配置不用修改,单个操作的
security配置会覆盖全局默认规则,此时用户注册的POST接口就可以公开访问了,其他接口仍然保持JWT认证要求。
内容的提问来源于stack exchange,提问作者user3174311
相关产品推荐
相关产品推荐

