我目前正在使用 CakePhp 在网站上设置简单的身份验证,用户可以访问任何页面,但有一个需要登录的管理系统。
授权工作正常,只有管理页面受到限制并被重定向到登录页面。我遇到的问题是我无法以管理员身份登录。我在数据库中插入了一条管理员记录,其密码已经过哈希处理。但是当我尝试登录时,它并没有if($this->Auth->login())
像它应该做的那样下降。这是我正在使用的代码:
应用控制器:
class AppController extends Controller {
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'admins', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'admins', 'action' => 'index'),
)
);
function beforeFilter() {
if ($this->params['controller'] != 'admins') {
$this->Auth->allow('*');
}
$this->Auth->loginAction = array('controller' => 'admins', 'action' => 'login');
}
}
管理员控制器:
class AdminsController extends AppController {
var $components = array('Auth');
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('login');//allow the login page to be accessed.
}
public function login() {
if($this->request->is('post')) {
if($this->Auth->login())
{
return $this->redirect(array('controller' => 'admins', 'action' => 'index'));
}
else
{
//why is it getting to this point with correct details?
debug('failed'); exit;
}
}
}
不确定我是否遗漏了一些意味着$this->auth->login()
失败的东西?我确实尝试将其全部重命名为 User 而不是 Admin 以查看是否是导致他出现问题的原因,但结果仍然相同。通过 cake 添加管理员,使用 authcomponent 对密码进行哈希处理,如下所示:
class Admin extends AppModel {
public function beforeSave($options = array())
{
if(isset($this->data['Admin']['password'])) {
$this->data['Admin']['password'] = AuthComponent::password($this->data['Admin']['password']);
}
return true;
}
}