2

我是 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->data 作为参数,会话中没有写入任何内容,页面只是刷新。但是当您提供 $this->request->data 它可以工作时,凭据将写入会话并且我被正确重定向。但是我注意到您可以使用 $this->Auth->login($this->request->data) '登录'任何人,即使他们不存在于数据库中。除此之外,如果我输入了错误的凭据,什么也不会发生,不会显示任何闪烁消息。

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

如果我没有提供回复所需的所有信息,我深表歉意。任何帮助是极大的赞赏。

4

2 回答 2

5

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

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

于 2012-08-02T15:00:27.363 回答
0

您在哪里定义要使用的引擎?可能与http://ask.cakephp.org/questions/view/unable_to_login相同的问题 已解决,如文档中所述设置引擎/适配器。

于 2012-04-05T10:16:15.430 回答