Symfony2 - 成功登录后的重定向

Dan*_*Dan 2 authentication login symfony

我刚开始学习Symfony 2教程.我已经创建了一个包含用户类的包,并尝试按照说明设置登录过程.我想我差不多了,不过我现在正处于最后一关.

我已经设置了一个包:Dan\AuthBundle,它包含我的用户类和另一个包:Dan\HelloBundle,我想只允许登录用户访问.

我的security.yml文件如下:

security:
    encoders:
        Dan\AuthBundle\Entity\User: sha512

    providers:
        main:
            entity: { class: Dan\AuthBundle\Entity\User, property: username }
        administrators:
            entity: { class: DanAuthBundle:User }

    firewalls:
        secured_area:
            pattern:    ^/*
            form_login:
                check_path: /login_check
                login_path: /login
                always_use_default_target_path: false
                default_target_path: /hello

    access_control:
        - { path: ^/hello/.* }
Run Code Online (Sandbox Code Playgroud)

主要的routing.yml文件如下所示:

DanAuthBundle:
    resource: "@DanAuthBundle/Resources/config/routing.yml"
    prefix:   /auth/

DanHelloBundle_homepage:
pattern:  /hello/
defaults: { _controller: DanHelloBundle:Default:index }

login:
    pattern: /login
    defaults: {_controller: DanAuthBundle:Default:login }

login_check:
    pattern: /login_check
Run Code Online (Sandbox Code Playgroud)

我已手动创建了几个用户类实例.

如果我尝试访问url/hello,我会正确地重定向到登录页面.如果我输入了错误的详细信息,我会在模板中收到正确的消息,但是,当我使用正确的详细信息登录时,我收到324(空响应)错误(此时,浏览器中显示的URL是login_check).

从阅读文档,我想我应该被重定向到我最初尝试访问的页面?

http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form

默认情况下,如果提交的凭据正确,则用户将被重定向到请求的原始页面(例如/ admin/foo).如果用户最初直接进入登录页面,他将被重定向到主页.这可以高度自定义,例如,您可以将用户重定向到特定的URL.

此外,如果我在输入正确的详细信息后尝试访问该页面,我将再次被重定向到登录页面.

任何人都可以看到我是否错过了任何明显的东西?

这是我的日志文件:

[2012-06-18 18:33:47] doctrine.DEBUG:SELECT t0.id AS id1,t0.username AS username2,t0.salt AS salt3,t0.hashed_pa​​ssword AS hashed_pa​​ssword4 FROM User t0 WHERE t0.username =?(["你好"])[] [] [2012-06-18 18:33:47] security.INFO:用户"你好"已经成功验证[] [] [2012-06-18 18:33:47 ] event.DEBUG:监听器"Symfony\Component\Security\Http\Firewall :: onKernelRequest"停止传播事件"kernel.request".[] [] [2012-06-18 18:33:47] event.DEBUG:没有为事件"kernel.request"调用侦听器"Symfony\Bundle\FrameworkBundle\EventListener\RouterListener".[] [] [2012-06-18 18:33:47] event.DEBUG:没有为事件"kernel.request"调用侦听器"Symfony\Bundle\AsseticBundle\EventListener\RequestListener".[] [] [2012-06-18 18:33:47] event.DEBUG:监听器"Symfony\Component\Security\Http\Firewall\ContextListener :: onKernelResponse"的通知事件"kernel.response".[] [] [2012-06-18 18:33:47] security.DEBUG:在session [] []中写入SecurityContext

任何建议表示赞赏

谢谢.

nvv*_*tal 7

// if you're using Symfony 2.0
$key = '_security.target_path';
// if you're using Symfony 2.1 or greater
// where "main" is the name of your firewall in security.yml
$key = '_security.main.target_path';

// try to redirect to the last page, or fallback to the homepage
if ($this->container->get('session')->has($key)) {
  $url = $this->container->get('session')->get($key);
  $this->container->get('session')->remove($key);
} else {
  $url = $this->container->get('router')->generate('homepage');
}

return new RedirectResponse($url);
Run Code Online (Sandbox Code Playgroud)