在CakePHP 3中,按照教程,为什么登录表单会无声地失败?

时间:2015-03-19 01:54:15

标签: cookies cakephp-3.0

这是一些令人费解的行为:在CakePHP 3教程(大约)之后,我创建了一个登录表单并设置了AuthComponent以使用表单输入进行身份验证。我还设置了AuthComponent进行授权。但是当我提交登录表单时,页面似乎重新加载,好像什么也没发生。为什么呢?

其他细节(结果证明是相关的):我在域的根目录中安装了CakePHP,而我没有使用mod_rewrite。我按照config / app.php中的说明禁用了mod_rewrite。

1 个答案:

答案 0 :(得分:0)

我最近碰到了这个bug,花了很多时间来解决它。它表示会话持久性的问题。无论我尝试过什么会话处理程序,会话数据都不会在页面加载中持续存在。引发我调查的可观察行为如上所述; AuthComponent,虽然它可以正确识别用户并且"保存"它使用setUser(),无法记住"加载下一页的已保存用户。换句话说,这看起来像登录表单无声地失败。此行为被证明是cookie无法在后续页面加载时加载的症状。 AuthComponent(通过Cake \ Network \ Session)会将新识别的用户写入cookie,但不会在下一页加载时加载cookie,导致它显示为我的登录屏幕只是重新呈现。

我将此问题追溯到了Cookie路径'在config / app.php中的Session组下设置。似乎使用默认设置,cookie的路径被设置为" / webroot /"。在我的设置中,我没有使用mod_rewrite,因此我的网址看起来像是/index.php/users/login。使用/ webroot /的路径,cookie未被正确识别和加载。因此,后续页面加载(1)无法读取当前会话ID,(2)无法找到任何先前存储的会话数据(无论会话数据如何存储),(3)无法识别当前用户, (4)让我回到登录页面,没有任何Flash错误消息。

如果您使用mod_rewrite,我不知道这个问题是否会消失,我意识到there has been extensive discussion about this on GitHub。我不确定谁在这个帖子中是正式的。但是,如果这对我有类似配置的任何人都有帮助,我通过设置' cookiePath'解决了这个问题。 => ' /'在'会话' config / app.php中的键。