注册和重置表单总是可用的



今天我注意到我总是可以访问寄存器和重置表单,无论我是否经过身份验证。

这是我的安全。yml:

security:
    encoders:
        FOSUserBundleModelUserInterface: sha512
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
    providers:
        fos_userbundle:
            id: fos_user.user_provider.username
    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:
                delete_cookies:
                    activeGame: {}
            anonymous:    true
    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }

关于http://symfony.com/doc/current/cookbook/security/remember_me.html#forcing-the-user-to-re-authenticate-before-accessing-certain-resources,能够访问此页面似乎是"正常的"。

但是我如何"轻松"地为认证用户禁用它,或者我错过了什么?

提前感谢!

您可以通过使用新引入的allow_if表达式来实现访问控制。

- { path: ^/register, allow_if: "not is_authenticated()" }

- { path: ^/register, allow_if: "user == 'anon'" }

我还没有完全测试过这个,但它应该只允许没有完全认证或没有被认证的用户访问该路径

这里有一些关于安全性的内容

下面是表达式

中可用的一些变量和函数

然后这里是一些信息的表达式,你可以使用在allow_if

但是,如果您不希望在登录用户尝试访问这些页面时抛出403 Access Denied Exception。相反,您希望将它们重定向到其他地方,然后可以向它们各自的控制器动作添加检查。比如:

public function registerAction()
{
    if (true === $this->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
        return $this->redirect($this->generateUrl('some_route_to_send_them_to'));
    }
    // ...
} 

相关内容

  • 没有找到相关文章

最新更新