我正在使用Symfony3用于使用FosUserBundle进行用户管理的Web应用程序。 我在我的应用程序中插入了登录和注册表单,如我的header.html.twig中所示。此文件(标题)插入到我的主文件(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
- 编辑 -
当我在我的控制器中添加die('ok');
与路线“主页”(http://localhost/baseurl/web/app_dev.php/)匹配时,我没有重定向到/login
但是我已经“确定”了白页。我不明白重定向到/ login的位置
答案 0 :(得分:2)
接下来,查看并检查防火墙部分。这里我们声明了一个名为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中索引操作的模式必须是“/".
希望有所帮助
克里斯