CakePHP Auth组件使用$ this-> Auth-> login()时不登录;

Dav*_*ull 2 php authentication cakephp

我是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'));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的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');
}
Run Code Online (Sandbox Code Playgroud)

我的用户模型:

class User extends AppModel {

public $name = "User";

}
Run Code Online (Sandbox Code Playgroud)

并登录表格:

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');
Run Code Online (Sandbox Code Playgroud)

问题是它不会记录用户.当调用$ this-> Auth-> login()而没有$ this-> request-> data作为参数时,会话中没有写入任何内容,页面只是刷新.但是当你提供它工作的$ this-> request->数据时,凭证被写入会话并且我被正确地重定向.但是我注意到你可以使用$ this-> Auth-> login($ this-> request-> data)"登录"任何人,即使它们不在数据库中.除此之外,如果我输入错误的凭据没有任何反应,则不会显示任何闪存消息.

我不想做任何特别的事情,我想要的就是能够记录用户.我有一个简单的用户表,其中包含用户名和密码字段,我已经按照他们的示例阅读了他们的文档,但我仍然没有尝试过工作.

如果我没有提供提供回复所需的所有信息,我会道歉.任何帮助是极大的赞赏.

小智 5

我有完全相同的经历.发生在我身上的是,有一次,我能够使用一些用户名和密码成功登录,但我从未在视图中看到任何代码,表明我已登录.当我后来登录时,我也很困惑使用随机用户名和密码,它仍然给了我一个成功的登录通知.

我想发生的事情是,如果你处于登录状态,那么无论你输入什么用户名和密码,$this->Auth->login()都会返回true.解决方案可能是以某种方式调用$this->Auth->logout()您的程序,或清空您的cookie,以便程序不再指定您登录.然后$this->Auth->login()将再次正常工作.