symfony - FOSUserBundle "Register"路由重定向到 "Login"路由

标签 symfony fosuserbundle

我刚刚使用 ORM 和 MySQL 安装了 Symfony2 的 FOSUserBundle,但我无法使注册页面可供匿名用户使用。

如果我去

http://myapp.localhost/login

它显示登录表单,但是如果我转到:

http://myapp.localhost/register

它将我重定向回登录表单。

这里有一个问题,如果我在登录屏幕中登录,然后导航到注册屏幕,则会显示注册表单。

查看日志,这就是我得到的:

request.INFO: Matched route "fos_user_registration_register" 
(parameters: "_controller":
 "Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction",
   "path": "/register/",
   "permanent": "true",
   "scheme": "null",
   "httpPort": "80",
   "httpsPort": "443", "_route": "fos_user_registration_register") [] []

 request.INFO: Matched route "fos_user_registration_register" 
 (parameters: "_controller": 
 "FOS\UserBundle\Controller\RegistrationController::registerAction", 
 "_route": "fos_user_registration_register") [] []

  security.INFO: Populated SecurityContext with an anonymous Token [] []
  [2013-08-12 13:48:37] event.DEBUG: Notified event "kernel.exception" to listener "Symfony\Component\Security\Http\Firewall\ExceptionListener::onKernelException". [] []
  [2013-08-12 13:48:37] security.DEBUG: Access is denied (user is not fully authenticated) by "/usr/share/www/etsytracker/vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/AccessListener.php" at line 73; redirecting to authentication entry point [] []

所以看起来我得到了一个匿名 token ,但是 Symfony 说我没有完全通过身份验证并将我踢到登录页面。

这是我的 security.yml 文件:

security:
acl:
   connection: default
encoders:
   FOS\UserBundle\Model\UserInterface: sha512

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout: true
        anonymous: true

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

access_control:
    - { path: ^/register$,                roles: 'IS_AUTHENTICATED_ANONYMOUSLY' }
    - { path: ^/login$,                   roles: 'IS_AUTHENTICATED_ANONYMOUSLY' }
    - { path: ^/resetting$,               roles: 'IS_AUTHENTICATED_ANONYMOUSLY' }
    - { path: ^/,                         roles: 'ROLE_USER'  }
    - { path: ^/admin,                    roles: 'ROLE_ADMIN' }

以及我关于 FOSBundle 的 config.yml:

fos_user:
  db_driver: orm
  firewall_name: main
  user_class: TestBundle\MyTestBundle\Entity\Users

最佳答案

正如 m0c 所指出的。

在我的 config.yml 文件中,^/ 路径只能由经过身份验证的用户访问,并且我只将 ^login$ 路径列入白名单,而不是^/register$ 路径。

删除该路径的^/角色解决了这个问题。

关于symfony - FOSUserBundle "Register"路由重定向到 "Login"路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18194521/

相关文章:

php - fatal error : Class not found in AppKernel. PHP

css - Symfony3 中的 Assets 与 CSSREWRITE

symfony - APC 不保存 fosuserbundle 扩展类中的属性

symfony - 如何调试 Symfony 环境中的所有参数?

symfony - Assetic 和模板继承

symfony - 覆盖 FOSUserBundle Controller

session - 在 symfony 2.1 中的域和子域之间共享身份验证

symfony - 使用 FOSUserBundle 在 Symfony2 中扩展 UserManager

authentication - FOSUserBundle - 默认配置的更改,覆盖一些默认设置

doctrine-orm - 使用可翻译的学说和 Symfony 2 形式