我正在CakePHP 3中重建Web应用程序,并计划更改应用程序的结构。目前,架构如下 - 并且没有一个是用Cake编写的。
https://app.example.com
处有一个登录页面,用于在成功登录时设置PHP会话变量。然后所有应用程序都在子目录中,例如
https://app.example.com/application-1
https://app.example.com/application-2
https://app.example.com/application-3
每个子目录都有一个脚本,用于检查是否设置了适当的会话变量,否则重定向到登录页面,例如:尝试在未登录的情况下访问https://app.example.com/application-1
会将用户发送到https://app.example.com/
我打算在CakePHP 3中重建其中一个应用程序https://app.example.com/application-2
,并在单独的子域(例如https://cake.example.com/
)上执行此操作。
我想要做的是允许用户仍然通过https://app.example.com
登录,然后使用https://cake.example.com/
,如果他们已成功通过身份验证。
我计划允许我的PHP会话跨多个子域工作 - 按照Allow php sessions to carry over to subdomains
我不确定这在Cake 3中是如何工作的。我的一个想法是设置https://cake.example.com/
而不启用任何Cake的Auth功能。然后我将使用AppController::beforeFilter()
来检查会话变量。如果设置得当,请允许用户使用任何Cake Controller方法。如果没有,请将它们重定向到可以登录的https://app.example.com
。
我正在寻找一些关于是否有更好的方法来做到这一点的建议,如果这是安全的?我知道这样做本质上就像使用 no 身份验证开发Cake应用程序,并且只依赖于beforeFilter()
中正在读取的会话变量。
https://app.example.com
处的登录脚本还会写入数据库,其中包含用户ID,IP,用户代理字符串和日期/时间等内容。我可以从我的Cake应用程序访问这个数据库,但是在每个请求中查询这个数据库的想法似乎也是错误的。
值得一提的是https://cake.example.com
不能拥有自己的登录页面,即使它连接到现有用户数据库以查找凭据也是如此。这是因为用户通过https://app.example.com
登录,然后充当其应用程序的仪表板。基本上,当他们到达https://cake.example.com
时,他们必须进行身份验证,或者发送回现有的登录页面。