2012-07-25 83 views
3

創建一個基本的登錄頁面 - 它工作,但後來我們改變了我們的數據庫,我們的重定向不再工作。cakephp重定向查詢

當我們去登錄網站時,返回說用戶名/密碼不正確,在檢查了網站正在檢查數據庫的sql代碼後 - 它發送了正確的信息,但不允許我們登錄

我們希望用戶在登錄到網站時重定向到ebox(控制器)主頁(視圖)。

這裏是

public function login(){ 

    $this->set('title_for_layout', 'Individual Registration'); 
    $this->set('stylesheet_used', 'style'); 
    $this->set('image_used', 'eBOXLogo.jpg'); 

    if ($this->request->is('post')){ 
     if ($this->Auth->login()){ 
      $username = $this->request->data['User']['username']; 
      if (0 === $this->User->find('count',array('conditions'=>array('activated'=>true,'username'=> $username)))){ 
       $this->Session->setFlash('Sorry, your account is not validated yet.'); 
       $this->redirect($this->referer()); 
       } 
      else{ 
       $this->Auth->user('id'); 
       $this->redirect(array('controller' => 'Eboxs','action' => 'home')); 
       } 
     } 

     else{ 
      $this->Session->setFlash('Username or password is incorrect'); 
     } 
    }else{ 
     $this->Session->setFlash('Welcome, please login'); 
    } 


} 

在這裏的控制器日誌代碼爲視圖

<?php  
     echo $this->Form->create('User', array('action' => 'login')); 
     echo $this->Form->input('username'); 
     echo $this->Form->input('password'); 
     echo $this->Form->end('Login'); 

    ?> 
+0

取下硬編碼條件和檢查 - 如果($這 - >請求 - >數據[ '用戶'] [ '密碼'] == 'qazwsx'){ } – Sitansu 2012-07-25 06:13:07

+0

我刪除if語句現在它回來無效的用戶名/密碼 – user1402677 2012-07-25 06:24:31

+0

更新代碼 – user1402677 2012-07-25 06:35:53

回答

0

啓用調試模式爲「2」在core.php中文件中的代碼,當你正在改變數據庫,或者你可以刪除模型緩存。稍後可以在生產站點中將調試模式更改爲0。此外,檢查你有新的用戶表中的有效用戶名和密碼database.Also檢查密碼field.It的結構應該是VARCHAR 255

還修改上面的邏輯 -

if ($this->Auth->login()){ 
    $username = $this->request->data['User']['username']; 
    if (0 === $this->User->find('count',array('conditions'=>array('activated'=>true,'username'=> $username)))) { 

    $this->Session->setFlash('Sorry, your account is not validated yet.'); 
    $this->redirect($this->referer()); 
    } else { 
    $this->Auth->user('id'); 
    $this->redirect(array('controller' => 'Eboxs','action' => 'home')); 
    } 
} 

在查看文件,而不是使用

echo $this->Form->create('User', array('action' => 'login')); 

嘗試使用 -

echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'login'))); 
+0

從3更改爲2,密碼現在是varchar(255)。我檢查了網站發送的密碼和數據庫中的密碼(兩者都是加密的),它們是相同的。 其仍然拋出錯誤 – user1402677 2012-07-25 06:31:32

+0

其仍然拋出無效的用戶名/密碼錯誤 – user1402677 2012-07-25 06:37:28

+0

嘿謝謝,我們已經解決了我們的問題。哈希密碼長度比密碼列長度長,所以當我們嘗試登錄時密碼不同。 – user1402677 2012-07-26 05:31:30

0

有以下可以檢查的情況下,爲什麼你的代碼是不工作:

  1. 你有沒有用在你的用戶模型的beforeFilter()方法?

    如果是,請檢查它是什麼意思。

  2. 把你的'登錄'方法放在UsersController的beforeFilter中的Auth-> allow()方法中。

    function beforeFilter(){ 
        $this->Auth->allow('login'); 
    } 
    
  3. 請檢查保存到你的數據庫相關的哈希密碼是否等於您輸入的對應用戶或不是密碼。您可以檢查驗證使用以下語法哈希密碼:

    pr(AuthComponent::password('USER PASSWORD HERE')); 
    
  4. 您可以使用下面的語法來創建表格:

    echo $this->Form->create('User', array('url' => $this->request->params)); 
    

懇請如果仍然不能爲你工作。

1
I think try this 

//app controller 
class AppController extends Controller { 

    public $components = array(
     'Acl', 
     'Auth' => array(
      'authorize' => array(
       'Actions' => array('actionPath' => 'controllers') 
      ) 
     ), 
     'Session' 
    ); 


    public function beforeFilter() { 

    //Configure AuthComponent 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
    $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login'); 
    $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add'); 
    } 

} 


//login action view 

echo $this->Form->inputs(array(
    'legend' => __('Login'), 
    'username', 
    'password' 
)); 


//this is controller code 


if ($this->request->is('post')) { 
     if ($this->Auth->login()) { 
    $this->redirect($this->Auth->redirect()); 
     } else { 
    $this->Session->setFlash('Your username or password was incorrect.'); 
     } 
    }