1

我正在开发一个网站,并注意到“记住我”登录功能不起作用。

所以我在 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 }

记住我的功能现在似乎起作用了,因为如果我登录然后关闭浏览器并重新加载浏览器,我仍然登录到该站点。但是,如果我尝试访问需要用户登录的任何页面(例如 /account/settings),我会收到以下错误:

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

我已经清除了缓存,但这并不能解决问题。

有想法该怎么解决这个吗?

4

2 回答 2

0

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

在我拥有的任何经过身份验证的方法的控制器方法中:

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

这需要更改为:

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

而已。感谢遗忘的帮助我解决了这个问题。

于 2013-11-03T11:13:48.263 回答
0

在您的代码中的某处(控制器中的 /account/settings Action )您有类似的东西

return false;

或者

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

调试您的操作 ( /account/settings ) 并确保您返回: - 如果您使用注释,则返回数组或 - 如果您使用其他定义路由的方法,则返回“响应”实例

于 2013-11-03T07:04:13.027 回答