如何根据方法从 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