2013-10-25 42 views
1

我正在开发一个网站,并注意到'记住我'登录功能不起作用。Symfony2 + FosUserBundle与“记住我”给500内部服务器错误

所以我增加了一个记得我部向security.yml

firewalls: 
    secured_area: 
     pattern: ^/ 
     form_login: 
      check_path: /login_check 
      login_path: /login 
      provider: fos_userbundle 
     remember_me: 
      key:  "%secret%" 
      lifetime: 31536000 
      path: /
      domain: ~ 
     logout: 
      path: /logout 
      target:/
     anonymous: ~ 

仅供参考以下是访问控制部分:

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

记住我的功能现在看来,如果因为工作,我登录然后关闭浏览器并重新加载浏览器,我仍然登录到网站。但是,如果我试图去要求用户先登录任何网页(如/帐号/设置)我得到以下错误:

The controller must return a response (false given). 
500 Internal Server Error - LogicException 

我已清空缓存并不能解决问题。

有关如何解决此问题的任何想法?

在你的代码
+0

是的,为什么选择投票?只是upvote使其成为平均。 :) – ihsan

+0

我问了一个明显的问题。你确定控制器对应路径'/ account/settings'返回结果吗?因为错误很明显.. – Lughino

+0

是的,如果我从Security.yml的防火墙设置中删除'remember_me'部分,所有页面都可以正常工作。 – someuser

回答

0

某处(/控制器帐户/设置动作)你碰到这样的

return false; 

$aVariable = false; 
[... code ...] 
return $aVariable; 

调试你的动作(/帐号/设置),并确保你返回: - 数组,如果您使用注释 或 - 如果您使用其他方法定义路线,则为“响应”实例

0

事实证明,答案非常简单。

在我的任何身份验证方法,我只好控制器方法:

$this->container->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY') 

这需要改为:

$this->container->get('security.context')->isGranted('ROLE_USER') 

就是这样。感谢忘记帮助我解决这个问题。