代码之家  ›  专栏  ›  技术社区  ›  Anton Medvedev

Symfony中同一防火墙的匿名和认证用户

  •  1
  • Anton Medvedev  · 技术社区  · 6 年前

    我有两个auth和api防火墙。但我想把它们组合起来,并且能够检查控制器中是否有用户。

    firewalls:
        user:
            pattern:  ^/api/auth
            stateless: true
            anonymous: true
            json_login:
                check_path:               /api/auth/login_check
                success_handler:          lexik_jwt_authentication.handler.authentication_success
                failure_handler:          lexik_jwt_authentication.handler.authentication_failure
                require_previous_session: false
    
        api:
            pattern:   ^/api
            stateless: true
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator
    
    access_control:
        - { path: ^/api/auth,     roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/api,          roles: IS_AUTHENTICATED_FULLY }
    

    我想做的是将防火墙合并为一个防火墙,允许任何用户使用所有防火墙,但如果JWT通过,仍然可以识别用户。

    有可能吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   fgamess    6 年前

    在我看来,要做到这一点,你只需要防火墙匹配 ^/原料药 模式并继续使用guard身份验证器。然后,在验证器内部,检查请求的确切路由,并选择是继续使用普通的guard验证器流还是使用自定义逻辑来实现json登录。但即使guard允许您实现自己的逻辑,它还是有点脏。保持防火墙分离听起来更好。

        2
  •  0
  •   Renato Guimares Mogekag    6 年前

    我认为最好保持单独的防火墙,如前所述,但如果您绝对需要保持您的应用程序对所有人开放,并检查用户是否在您的控制器中经过身份验证,您可以参考symfony的 documentation 使用类似于:

    $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');