首页 文章

如果未登录/ Symfony3 FosUserBndl,则阻止用户重定向到登录页面

提问于
浏览
1

我正在使用Symfony3作为用户管理FosUserBundle的Web应用程序 . 我在我的应用程序中插入了登录和注册表单,如我的header.html.twig中所示 . 此文件( Headers )插入到我的主文件(base.html.twig)中,这意味着它几乎插入到我的所有页面上 .

<div class="modal fade" id="registerModal" role="dialog">
        {{ render(controller('UserBundle:Registration:Register', {'request': app.request})) }}
  </div> 

  <div class="modal fade" id="loginModal" role="dialog">
        {{ render(controller('UserBundle:Security:Login')) }}
  </div>

问题是,当我尝试访问主页http://localhost/baseurl/web/app_dev.php/时,我被重定向到http://localhost/baseurl/web/app_dev.php/login fos_user_security_login (在security.yml的login_path中配置的FosUserBundle登录路由 . )我不明白如何在案例中配置和使用FUB我已覆盖并在标头中插入security_login表单

我的security.yml如下:

security:

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
        FOS\UserBundle\Model\UserInterface: sha512

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            pattern: ^/
            form_login:
                login_path: fos_user_security_login
                check_path: fos_user_security_check
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager
                default_target_path: /
                failure_path: /
            logout:
                path:   /logout
                target: /
            anonymous: true
            remember_me:
                secret:   '%secret%'
                lifetime: 604800 # 1 week in seconds
                path:     /

    role_hierarchy:
        ROLE_SECRETAIRE: [ROLE_USER]
        ROLE_ADMIN: [ROLE_SECRETAIRE]

    access_control:
        - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_SECRETAIRE }

config.yml:

# FOSUserBundle Configuration
fos_user:
    db_driver:              orm
    firewall_name:          main
    user_class:             UserBundle\Entity\User
    use_listener:           true
    use_flash_notifications: true
    use_authentication_listener: true
    use_username_form_type: true
    model_manager_name:     null  # change it to the name of your entity/document manager if you don't want to use the default one.
    from_email:
        address:        xxx@gmail.com
        sender_name:    Gauthier
    profile:
        form:
            type:               FOS\UserBundle\Form\Type\ProfileFormType
            name:               fos_user_profile_form
            validation_groups:  [Profile, Default]
    change_password:
        form:
            type:               FOS\UserBundle\Form\Type\ChangePasswordFormType
            name:               fos_user_change_password_form
            validation_groups:  [ChangePassword, Default]
    registration:
        confirmation:
            enabled:    false
            template:   '@FOSUser/Registration/email.txt.twig'
        form:
            type:               UserBundle\Form\Type\RegistrationType
            name:               fos_user_registration_form
            validation_groups:  [Registration, Default]
    resetting:
        token_ttl: 86400
        email:
            template:   '@FOSUser/Resetting/email.txt.twig'
        form:
            type:               FOS\UserBundle\Form\Type\ResettingFormType
            name:               fos_user_resetting_form
            validation_groups:  [ResetPassword, Default]
    service:
        mailer:                 fos_user.mailer.default
        email_canonicalizer:    fos_user.util.canonicalizer.default
        username_canonicalizer: fos_user.util.canonicalizer.default
        token_generator:        fos_user.util.token_generator.default
        user_manager:           fos_user.user_manager.default

-- EDIT --

当我在控制器中添加 die('ok'); 与路径'homepage'(http://localhost/baseurl/web/app_dev.php/)匹配时,我没有被重定向到 /login 但我在白页上打印了"ok" . 我不明白重定向到/ login的位置

1 回答

  • 2

    来自FOSUserBundle docs

    接下来,查看并检查防火墙部分 . 这里我们声明了一个名为main的防火墙 . 通过指定form_login,您告诉Symfony Framework,每次向此防火墙发出请求,导致用户需要对自己进行身份验证时,用户将被重定向到可以输入其凭据的表单 .

    要允许访问您的主页,您可以添加以下内容:

    # app/config/security.yml file
    security:
        ...
        access_control:
            # allow anonymous access to the homepage:
            - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    

    在这种情况下,routing.yml中的索引操作的模式必须是“/” .

    希望有所帮助

    克里斯

相关问题