2

我使用了一个覆盖 FosUserBundle 的 UserBundle,在那里我users为所有用户路由设置了前缀:

// UserBundle/Resources/config/routing/all.xml
...
<import
    resource="@FooUserBundle/Resources/config/routing/security.xml" 
    prefix="/users/" />
<import
    resource="@FooUserBundle/Resources/config/routing/profile.xml"
    prefix="/users/profile" />
<import
    resource="@FooUserBundle/Resources/config/routing/registration.xml"
    prefix="/users/register" />
...

如果我用 来检查路线php app/console route:debug,它们会以预期的前缀显示:

fos_user_security_login               ANY      ANY    ANY  /users/login    
fos_user_security_check               POST     ANY    ANY  /users/login_check
fos_user_security_logout              ANY      ANY    ANY  /users/logout
fos_user_registration_register        ANY      ANY    ANY  /users/register/

我使用以下 url 显示登录表单:

http://www.foo.local/app_dev.php/users/login

为了管理提交,我在我的树枝模板中使用了这个路径:

<form action="{{ path("fos_user_security_check") }}" method="post">

处理模板后,它会生成所需的操作 url:

<form action="/app_dev.php/users/login_check" method="post">

我的 security.yml 配置是这样的:

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

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

但是,如果我使用此表单登录用户,它会将我重定向到http://www.foo.local/app_dev.php/login,而不是http://www.foo.local/app_dev.php/users/login,给出“找不到路由错误”

我怎样才能解决这个问题?

4

1 回答 1

1

FOSUserBundle 不处理登录。它由安全组件完成。所以 FOSUserBundle 没有办法改变它,因为它不对默认行为负责。

表单登录允许在登录后配置重定向:http: //symfony.com/doc/current/cookbook/security/form_login.html#redirecting-after-success

我看到了两种方法:

使用自定义成功处理程序(更简洁的方式,但更复杂且尚未在官方文档中记录)将登录后的重定向设置为固定路径(如文档中所述),控制器再次重定向。

于 2015-01-07T16:38:14.120 回答