当我试图打电话时: 验证::的getInstance() - >身份验证($电子邮件,$密码) 对于登录控制器中的身份验证,我调用了Auth :: getInstance() - > isAuthenticated()并获得结果bool(true)。然后我重定向到另一个页面,Auth :: getInstance() - > isAuthenticated()给bool(false)。在我使用此身份验证之后,如何在此之后的任何页面上获取会话已经bool(true),直到我使用Auth :: getInstance() - > unauthenticate()该会话或使其成为会话的全局?目前我正在使用会话数据库。
问题:如何在重定向到另一个页面后验证当前用户?
答案 0 :(得分:0)
在不了解您的代码的情况下,我可以预测这种行为的几种可能来源......
1)您没有写出用户通过会话/ cookie验证的事实,因此第二页请求并不知道第一页的结果。
2)如果第一页上的验证成功(并在会话/ cookie中记录),并且重定向发生,但您重定向回用户已经看过的页面(例如,主页 - >登录页面 - >主页)然后您的浏览器可能会从它的本地缓存中加载它而不是从服务器获取新的(经过身份验证的)页面。
尝试将会话变量转储到浏览器,以查看是否在请求之间保留了身份验证结果,并尝试在重定向URL上添加时间戳或使用标头来阻止客户端缓存。这至少可以让你缩小范围,或者消除这两个选项。
答案 1 :(得分:0)
Auth插件已经管理了所有会话控制以进行身份验证,而无需开发人员的任何额外工作。
您遇到的问题可能是因为会话由于某种原因没有启动。这可能是因为Nuclio没有检测到它是从浏览器运行的。 Nuclio通过检查$ _SERVER中的REMOTE_HOST和HTTP_HOST值来检测到这一点。如果两者都为null,则不会启动会话(以避免在命令行上生成标头)。
还要确保您的基本应用程序类正在扩展Nuclio Application插件类,而不是在不调用父构造方法的情况下覆盖__construct方法,因为这会导致所有初始化失败并且不会创建/恢复会话。