我是CakePHP的新手,我已阅读他们的文档,我正在关注他们的简单身份验证示例。我也搜索了很多(包括本网站上的答案)以回答我的问题。
我正在使用cakePHP 2.0,我的UsersController的登录功能如下所示:
function login() {
if ($this->request->is('post')) {
if ($this->Auth->login(/*$this->request->data*/)) {
$this->redirect($this->Auth->redirect());
}else {
$this->Session->setFlash(__('Invalid username or password, try again'));
}
}
}
我的AppController看起来像这样:
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'pages', 'action' => 'display'),
'logoutRedirect' => array('controller' => 'pages', 'action' => 'display')
)
);
public function beforeFilter() {
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
}
我的用户模型:
class User extends AppModel {
public $name = "User";
}
登录表单:
echo $this->Session->flash('auth');
echo $this->Form->create('User', array('action' => 'login'));
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end('Login');
问题是它没有记录用户。当$ this-> Auth-> login()调用而没有$ this-> request->数据作为参数时,会话中没有写入任何内容并且页面只是刷新。但是当您提供$ this-> request->数据时,它会运行,凭据会被写入会话并且我被正确重定向。但是我注意到,即使数据库中不存在,您也可以使用$ this-> Auth-> login($ this-> request-> data)“登录”任何人。除此之外,如果我输入错误的凭证没有任何反应,则不会显示闪存消息。
我不想做任何特别的事情,我想要的就是能够记录用户。我有一个简单的用户表,其中包含用户名和密码字段,我已经按照他们的示例阅读了他们的文档,但仍然没有我已经尝试过了。
如果我没有提供提供回复所需的所有信息,我道歉。非常感谢任何帮助。
答案 0 :(得分:5)
我有完全相同的经历。发生在我身上的是,有一次,我能够使用一些用户名和密码成功登录,但我从未在视图中看到任何代码,表明我已登录。当我后来登录时,我也很困惑使用随机用户名和密码,它仍然给了我一个成功的登录通知。
我认为发生的事情是,如果您处于登录状态,那么无论您输入什么用户名和密码,$this->Auth->login()
都会返回true
。解决方案可能是以某种方式在您的程序中调用$this->Auth->logout()
,或清空您的cookie,以便程序不再指定您已登录。然后$this->Auth->login()
将再次正常工作。
答案 1 :(得分:0)
您在哪里定义要使用的引擎? 可能与http://ask.cakephp.org/questions/view/unable_to_login相同的问题 如文档中所述,已经解决了设置引擎/适配器的问题。