我正在构建一个网站,需要一个简单的身份验证系统才能放在我的网站上,这样只有拥有密码的人才能访问它。这与用户和身份验证组件不同,因为它只是为了防止访问,除非你应该这样做。
原因是我有一个客户端预览站点,我只希望他们能够访问它但不能使用内置身份验证,因为他们需要同时查看登录和注销状态,因此使用自定义简单身份验证(请注意,这不需要是安全的)。
我有一个工作系统并阻止访问我在AppController中进行检查,以便所有请求首先检查我的会话是否存在:
public function beforeRender()
{
if ($this->Session->check('client') != true)
{
$this->layout = 'client_login';
$this->render = 'pages/client_login';
}
}
布局位工作正常所以它理解会话,但它没有显示我的客户端登录视图,它上面有一个简单的登录表单,所以它没有正确地进行渲染。任何想法为什么不呢?如果该会话不存在,还可以显示网站上所有操作的布局和视图。
答案 0 :(得分:2)
'render'是一个函数,而不是属性。所以你的代码应该是:
$this->render('pages/client_login');
编辑:顺便说一句,这段代码不能放在beforeRender()回调中,因为这会导致无限循环(render()引发beforeRender())。
beforeFilter()肯定会是一个更好的地方。
function beforeFilter()
{
if ($this->Session->check('client') != true)
{
$this->autoRender = false;
$this->layout = 'client_login';
$this->render('/pages/client_login');
}
}
就像在我的评论中解释的那样,当你在使用PagesController的URL上时,在PagesController-> display()方法中显式调用render()会阻止你想要做什么。
重新考虑一下你的需求,我看到两个解决方案。
如果您需要一种简单的方法来完全保护您的网站,而无需修改您的应用程序代码,您可以使用Apache通过.htaccess保护访问。在您的情况下,基本身份验证或IP或域上的过滤器可能可以做到这一点。见http://httpd.apache.org/docs/2.0/howto/auth.html
如果您想使用Cake,因为您已经有自定义身份验证系统可以填充会话,那么您可以使用Auth组件来授予或拒绝访问权限。在AppController中,您可以使用以下内容:
function beforeFilter()
{
$this->Auth->loginAction = '/pages/client_login';
if($this->Session->check('client'))
{
$this->Auth->allow('*');
}
}
答案 1 :(得分:0)
试试这个: Session-> read('client')){ //客户端会话存在 } 其他{ //客户端会话不存在 }
答案 2 :(得分:0)
对于这种情况,我通常使用Basic http身份验证 Protecting content with basic authentication
在.htaccess中添加以下指令,该指令位于app文件夹上方的目录中(有关更多选项,请阅读1)
AuthUserFile /path/to/your/folder/.htpasswd
AuthGroupFile /dev/null
AuthName Administration
AuthType Basic
使用登录/密码配对在同一目录中创建.htpasswd文件,使用下面的工具