2010-10-24 50 views
0

我有一個問題與蛋糕的身份驗證,我根本無法過去(我一直在調試和嘗試不同的教程在過去兩天)。據我所見,它應該非常簡單,問題是每當我嘗試登錄時,它只是刷新登錄頁面。我不能爲了我的生活找出原因!我唯一的結論是,必須有一些(基本的)哪些教程理所當然地認爲我錯過了。cakePHP身份驗證組件不起作用

這裏有幾個片斷:

users_controller.php中

class UsersController extends AppController { 

    var $name = 'Users'; 

    function beforeFiler() { 
     parent::beforeFilter(); 
    } 
    function login() { 
    } 

    function logout() { 
     $this->Session->setFlash('You have successfully logged out.'); 
     $this->redirect($this->Auth->logout()); 
    } 
} 

app_controller.php

class AppController extends Controller { 

    var $helpers = array('Html','Form','Javascript'); 
    var $components = array('Auth'); 

    function beforeFilter() { 

     $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
     $this->Auth->loginRedirect = array('controller' => 'contents', 'action' => 'index'); 
     $this->Auth->logoutRedirect = array('controller' => 'contents', 'action' => 'view'); 
     $this->Auth->loginError = 'Something went wrong'; 
     $this->Auth->allow('register', 'view'); 
     $this->Auth->authorize = 'controller'; 
     $this->set('loggedIn', $this->Auth->user('id')); 
    } 

    function isAuthorized() { 
     return true; 
    } 
} 

login.ctp

<div class="midCol short"> 
    <h3>Login</h3> 
    <div class="loginBox"> 
    <?php e($form->create('User', array('controller'=>'users','action'=>'login')));?> 
     <?php 
     echo $this->Form->input('username'); 
     echo $this->Form->input('password'); 
     e($this->Form->end(array('label'=>'Login', 'class'=>'loginButton button png')));?> 
    </div> 
</div> 

任何幫助將是很大的應用這讓我把頭髮撕掉了!

+0

是否與驗證問題或重定向? – bancer 2010-10-25 00:46:17

+0

問題在於驗證。我檢查視圖中的$ loggedIn,並且它永遠不會觸發 – tiltos 2010-10-25 01:24:58

+0

把它放在'login.ctp'中:'echo $ this-> Session-> flash('auth');'同樣,執行生成的SQL查詢看起來好嗎?用戶是否存在?他發現了嗎? – deceze 2010-10-25 02:28:52

回答

0

感謝您的建議,但我最終拋棄了它並從頭開始重新構建。不完全確定它最初打破的原因,可能不會用美國英語調用內置函數!

0

Auth組件將在您登錄之前重定向到該頁面。如果該頁面是它將重定向到的登錄頁面。

當您測試時,很可能是您正在刷新登錄頁面,因此成功登錄時,您將被重定向到。您可以通過嘗試在登錄後執行身份驗證保護操作來檢查此問題。

這也給我帶來了很多麻煩 - 我認爲組件的當前功能在這方面有點笨拙。

0

我有完全相同的問題,發現我不得不重新啓動mySQL服務。一旦它重新啓動,我停止讓登錄頁面被重定向。希望有所幫助。

2

僅用於文檔,因爲我很難在Web上找到CakePHP 2.x的答案。這些東西需要「正確」才能使用表單身份驗證:

  • 配置需要正確,例如,

    public $components = array(
        'Auth' => array(
         'authenticate' => array(
          'Form' => array(
           'fields' => array(
            'username' => 'username', 
            'password' => 'password' 
           ), 
          ) 
         ) 
        ) 
    ); 
    
  • 你必須使用表單助手:在你的UsersController(領域的配置真的是隻有名字在DB不同要求)形式 - >創建增加了一個隱藏的輸入字段(「後」),並且由Form-> input()生成的輸入字段的名稱遵循Auth組件期望的約定。

  • 用戶 - >登錄不能將自定義數據傳遞到Auth-> login()。 Auth組件將從表單(=請求)獲取認證數據。

+1

這對我有用。我錯過了'字段'到'驗證'/'窗體'的額外嵌套。 – mile 2013-04-27 15:19:04

0

要把東西扔在這裏。我在使用cakephp身份驗證時遇到了幾乎無法解決的問題。最終做了一些調試,發現在我的數據庫準備期間,我創建了一個密碼字段,它完全能夠存儲正常大小的密碼......但是......當您開始使用密碼哈希時,您需要更多。我的代碼很好,但在登錄之前,我必須在密碼的VARCHAR字段中添加更多空間。如果您遇到了身份驗證問題 - 請確保您的密碼字段的大小適當並且不會被截斷我的。花了我整整一天的時間來找到它。 DOH!

0

糾正我,如果我錯了,但必須有不登錄的功能,內部重定向代碼或東西

function login() { 
} 

豈不是像

public function login() 
{ 
if ($this->request->is('post')) { 
    $user = $this->Auth->identify(); 
    if ($user) { 
     $this->Auth->setUser($user); 
     return $this->redirect($this->Auth->redirectUrl()); 
    } 
    $this->Flash->error(__('Invalid username or password, try again')); 
    } 
}