2012-02-13 49 views
0

我試圖設置一個登錄頁面,但是當我嘗試登錄時,即使使用了錯誤的用戶名/密碼,cake重定向到登錄頁面(註銷功能正確重定向) 。即使我插入了錯誤的信息,我也沒有發現任何錯誤,我不明白。這裏是我的控制器代碼:cakephp登錄頁面沒有去任何地方

class UsersController extends AppController { 
public $name='Users'; 
public $layout='pagelayout'; 
public $uses=array('User'); 



public function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('add', 'logout', 'overview'); 
} 

public function login() { 
$this->set('title', 'Log in to your Gulf Shores 4 Less account'); 
if ($this->request->is('post')) { 
    if ($this->Auth->login()) { 
     return $this->redirect($this->Auth->redirect()); 
    } else { 
     $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth'); 
    } 
} 

}

,這裏是我的模型:

<?php 
App::uses('AuthComponent', 'Controller/Component'); 
class User extends AppModel { 
public $name='User'; 
public $hasMany=array('Unit', 'Complex', 'Coupon', 'Location', 'Image', 'Charter', 'Course', 'Nightclub', 'Store'); 

public function beforeSave() { 
if (isset($this->data[$this->alias]['password'])) { 
    $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
} 
return true; 
} 
public $validate = array(
    'username' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'A username is required' 
     ) 
    ), 
    'password' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'A password is required' 
     ) 
    ), 
    'role' => array(
     'valid' => array(
      'rule' => array('inList', array('admin', 'advertiser')), 
      'message' => 'Please enter a valid role', 
      'allowEmpty' => false 
     ) 
    ) 
); 
} 

?> 

下面是從AppController中的代碼:

<?php 
class AppController extends Controller { 
public $components = array(
    'Session', 
    'Auth' => array(
     'loginRedirect' => array('controller' => 'users', 'action' => 'overview'), 
     'logoutRedirect' => array('controller' => 'pages', 'action' => 'index') 
    ) 
); 


function beforeFilter() { 
    $this->Auth->allow('login','index', 'view', 'condos', 'houses', 'hotels_and_motels', 'print_all_coupons', 'print_coupon', 'search', 'golf', 'charters', 'events', 'nightlife', 'shopping', 'visitors_info', 'contact_us'); 
} 
} 
?> 

而這裏查看代碼:

<div class="users form"> 
<?php echo $this->Session->flash('auth'); ?> 
<?php echo $this->Form->create('User');?> 
<fieldset> 
    <legend><?php echo __('Please enter your username and password'); ?></legend> 
<?php 
    echo $this->Form->input('username'); 
    echo $this->Form->input('password'); 
?> 
</fieldset> 
<?php echo $this->Form->end(__('Login'));?> 
</div> 

正如您所看到的,我幾乎複製並粘貼了Cakephp-2.0手冊中的內容。我的數據庫表和手冊的唯一區別是我的密碼在我的用戶表中存儲爲MD5散列。我無法弄清楚這是哪裏出軌了。

+0

** **更新我改變了我的login()函數,現在給了我一個登錄信息不正確時出現錯誤信息。我認爲現在的問題是,因爲我的密碼存儲在帶有MD5散列的數據庫中,所以它不檢查正確的密碼。我如何告訴Cake使用MD5哈希檢查器? – huzzah 2012-02-13 19:47:11

+0

**再次更新**。我讀過蛋糕中的默認散列是sha1,所以我將其中一個密碼更改爲sha1散列,但仍保留在登錄頁面(它仍然告訴我不正確的用戶名/密碼) – huzzah 2012-02-13 19:59:02

回答

1

確保您的密碼使用驗證組件哈希存儲。 AFAIK,不支持'普通'md5密碼。 Cake生成的哈希比md5更復雜。

查看documentation瞭解如何哈希密碼。如果您從使用md5散列的應用程序遷移,則必須將所有密碼重置爲所有用戶的隨機內容。

+0

好吧,我已經堅持存儲進入我的模型,但我通過創建用戶進行測試(並且它正常工作,重定向到正確的頁面)。問題是我已經創建的用戶有錯誤的散列。我完全可以改變它們,因爲這一切仍然處於測試模式,我只需要確切地知道什麼蛋糕正在使用,所以我可以找到正確的在線哈希生成器。 – huzzah 2012-02-13 20:11:21

+1

phpmyadmin中有一個SHA1函數可用於轉換。這是你一直在做什麼? – Vigrond 2012-02-13 20:14:34

+0

嗯,不,我沒有。我不知道我能做到這一點!這實際上是我嘗試創建登錄頁面並使用哈希和所有內容的第一天。無論如何,我進入我的分貝,並在一個已經創建的用戶的密碼寫入,把SHA1作爲一個函數在它的phpmyadmin,它*嘆*沒有工作。仍然給我'不正確的用戶名/密碼'錯誤,而不是重定向。 – huzzah 2012-02-13 20:23:53

0

您可以嘗試使用您AppController.php文件下列代碼

AppController.php

$this->Auth->authenticate = array(
      AuthComponent::ALL => array('userModel' => 'User'), 
      'Form' => array(
       'fields' => array('username' => 'email') 
      ) 
     ); 
     $this->Auth->authorize =false; 
     $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
     $this->Auth->fields = array('username' => 'email', 'password' => 'password'); 
     $this->Auth->loginRedirect = array('controller' => 'media', 'action' => 'index/'); 
     $this->Auth->logoutRedirect = '/logout'; 
     $this->Auth->loginError = 'Invalid e-mail/password combination. Please try again';