2013-01-03 85 views
2

我尝试使用CakePHP 2.0学习和编程网站时遇到了一个奇怪的问题。我曾经在1.3版本中工作过,但从未见过这个问题。我正在运行Cookbook中的简单认证和授权应用程序教程(第638页),并且已经检查并加倍检查以确保它是相同的。CakePHP 2.0:Odd Auth登录问题

我遇到的问题是,当我打电话/用户/登录和填写表格与虚假信息或干脆把它留空。 Auth将它记录下来,如果我这样做if($this->Auth->user())我会收到真实的。

我放弃了试图理解为什么会发生这种情况。令人奇怪的是....

/用户/登录

public function login(){ 
     if($this->request->is('post')){ 
      if($this->Auth->login($this->request->data)){ 
       $this->redirect($this->Auth->redirect()); 
      }else{ 
       $this->Session->setFlash('Wrong login credentials!', 'default', array('class' => 'notification error closeable')); 
      } 
     } 
} 

// Appcontroller.php ----验证配置就像我知道问题是什么

class AppController extends Controller { 

public $components = array(
    'Session', 
    'Auth' => array(
     'authenticate' => array(
      'Form' => array(
       'fields' => array('username' => 'email') 
      ) 
     ), 
     'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'), 
     'authorize' => array('Controller') 
    ) 
); 

public function isAuthorized($user){ 
    if(isset($user['role']) && $user['role'] === 'admin'){ 
     return true; 
    } 
    return false; 
} 
+1

你也可以发布你的代码加载和配置AuthComponent的地方吗? –

+0

我已经添加了Auth组件配置代码 –

+0

我在CakePHP 2.6.2 – DariusVE

回答

3

Ok.Seems 。试试做:

if($this->Auth->login()) 

而不是传递给它的CakeRequest对象。

的原因是:

在2.0 $this->Auth->login($this->request->data)将记录用户在任何数据公布,而在1.3 $this->Auth->login($this->data)将首先尝试识别用户并在成功时只登录。也许这就是为什么你能够在没有任何数据的情况下登录。

+1

+1上有此问题。我也会这样说。来源:http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#identifying-users-and-logging-them-in – Nick

+0

是的昵称。确切地说 –

+0

好的,那解决了这个问题。但是,即使在我的数据库中设置了用户名/密码组合,我也无法登录。 –

1
public $components = array(
    'Session', 
    'Auth' => array(
     'authenticate' => array(
      'Form' => array(
       'fields' => array('username' => 'email') 
      ) 
     ), 
     'loginAction' => array('admin' => false, 'controller' => 'users', 'action' => 'login') 
     'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'), 
     'authorize' => array('Controller') 
    ) 
); 

也可以尝试把一个debug($user);在开始你的isAuthorized方法在AppController中,看看它不能从那里得到一个假的。

+0

我试过,但仍然没有什么 –

+1

嗯。尝试在AppController的Auth数组中添加''loginAction'=> array('admin'=> false,'controller'=>'users','action'=>'login')''。我也会更新上面的代码。 –

+0

是啊...这让我拉掉我的头发...仍然不起作用... –