2013-01-03 81 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

是啊...這讓我拉掉我的頭髮...仍然不起作用... –