如何根据方法从 symfony2 防火墙中排除 api 路由
How to exclude an api route from symfony2 firewall based on method
所以我正在构建一个 symfony2 api 使用 fosrestbundle fosuserbundle 和 LexikJWTAuthenticationBundle 当我想访问 /api/users.json 到 post 一个新用户时我得到401 错误凭据错误。
我试过用这种方式在访问控制中添加一行:
- { path: post_user, role: IS_AUTHENTICATED_ANONYMOUSLY }
但是没用。
我也试过:
- { path: post_user, role: IS_AUTHENTICATED_ANONYMOUSLY, methods:[POST] }
如何才能仅排除 post 端点?
解决方案是创建一个新的防火墙,在 url 模式上禁用身份验证。棘手的是,安全配置还允许您 select 防火墙涵盖的方法。
只需将此添加到 security.yml 的防火墙中即可:
public:
methods: [POST]
pattern: ^/api/users
security: false
您现在可以通过 post 方法访问您的端点,并且获取和删除仍需要您使用的任何身份验证协议:)
请注意在使用 Adel 的解决方案并在控制器或操作中使用 @Security 注释时出现此异常:
The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL.
这可以通过将 security: false 替换为 anonymous : true 来规避。所以完整的解决方案是:
public:
methods: [POST]
pattern: ^/api/users
anonymous : true
所以我正在构建一个 symfony2 api 使用 fosrestbundle fosuserbundle 和 LexikJWTAuthenticationBundle 当我想访问 /api/users.json 到 post 一个新用户时我得到401 错误凭据错误。
我试过用这种方式在访问控制中添加一行:
- { path: post_user, role: IS_AUTHENTICATED_ANONYMOUSLY }
但是没用。
我也试过:
- { path: post_user, role: IS_AUTHENTICATED_ANONYMOUSLY, methods:[POST] }
如何才能仅排除 post 端点?
解决方案是创建一个新的防火墙,在 url 模式上禁用身份验证。棘手的是,安全配置还允许您 select 防火墙涵盖的方法。
只需将此添加到 security.yml 的防火墙中即可:
public:
methods: [POST]
pattern: ^/api/users
security: false
您现在可以通过 post 方法访问您的端点,并且获取和删除仍需要您使用的任何身份验证协议:)
请注意在使用 Adel 的解决方案并在控制器或操作中使用 @Security 注释时出现此异常:
The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL.
这可以通过将 security: false 替换为 anonymous : true 来规避。所以完整的解决方案是:
public:
methods: [POST]
pattern: ^/api/users
anonymous : true