2009-06-06 45 views
2

我試圖構建登錄註冊頁面,我的網站,我現在面臨的問題與他AUTH組件,爲什麼Auth Component的用戶名和密碼登錄automagic在CakePHP中按預期工作?

function beforeFilter() { 
    $this->Auth->loginAction = array('controller'=>'users','action'=>'login'); 
    $this->Auth->loginRedirect = array('controller'=>'users','action'=>'landing'); 
    $this->Auth->logoutRedirect = array('controller'=>'users','action'=>'home'); 

    // These pages do not require authenication<br/> 
    $this->Auth->allow('home','register','activate','forgot','reset','_sendEmail','reset'); 
} 

我使用$this->Auth->password方法加密並存儲在數據庫中的密碼,現在連當我登錄在成功地我不重定向到下用戶控制的着陸頁,我試着打印出$this->Auth和它說

[loginError] => Login failed. Invalid username or password. 
[authError] => You are not authorized to access that location. 

而且在我的數據庫對裏面我是用認證的領域是電子郵件和密碼,我讀的地方, AuthComponent需要字段t o是用戶名和密碼automagic工作

我無法弄清楚我做錯了,也登錄後,如果我試圖指向我的瀏覽器http://cake.localhost/users/register它應該會自動重定向到目標頁面,但它doesnt因爲某些原因。

任何線索,我去哪裏錯了?

希夫

+0

我可以假設,這是裏面app_controller.php?您是否意外地將此控制器添加爲授權的acos?那麼你可能不得不去確保所有用戶組都可以看到這個消息。 – codingbear 2009-06-06 05:33:30

+0

這是裏面UsersController – Shiv 2009-06-06 17:05:23

+0

loginAction/loginRedirect/logoutRedirect應該在app_controller的beforeFilter()..至少,這就是我發現作爲一個更好的設計 – codingbear 2009-06-07 04:33:20

回答

-1

如果正在使用CakePHP 1.2,則需要更改:

$this->Auth->allow('home','register','activate','forgot','reset','_sendEmail','reset'); 

$this->Auth->allow(array('home','register','activate','forgot','reset','_sendEmail','reset')); 

通知所添加的 「陣列()」 中的允許函數。

+0

哎呀抱歉,但它仍然沒有解決我的問題 – Shiv 2009-06-06 05:26:19

+1

你是否包括var $ components = array('Auth')? 此外,我發現這篇文章是一個很好的解決方案,不使用ACL: http://www.studiocanaria.com/articles/cakephp_auth_component_users_groups_permissions_revisited – Jefe 2009-06-06 05:29:23

+0

有趣...我會瀏覽這篇文章,是的,我已經設置組件變量 – Shiv 2009-06-06 05:31:46

1

嘗試$ this-> Auth-> allowedActions = array('*');在控制器的beforeFilter()(不在app_controller)中。

3

從CakePHP的食譜:

默認情況下,AuthComponent希望你有一個名爲「用戶」與使用所謂的「用戶名」和「密碼」字段的表。

我想知道如果您使用email作爲字段名稱,automagic會起作用嗎?

嘗試添加以下內容到beforefilter:

function beforeFilter() { 
    $this->Auth->fields = array(
     'username' => 'email', 
     'password' => 'password' 
    ); 
} 
+0

我已經把它放在已經 – Shiv 2009-06-11 13:44:35

+0

幫助我。謝謝。 – zgnilec 2012-05-29 13:29:21

0

我解決這個問題的方法,這是一個真正的黑客是我改名爲表單域密碼2,然後IIN我的控制器方法我設置

 

$this->data['password] = $this->data['password2] 
 

然後我打電話

 

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

,它似乎工作。 我不認爲這是最好的方式,但它的工作,我會一起去,直到我找到一個更好的解決方案。

+0

在調用$ this-> Auth-> login()之前,您是否在調用之前手動加密$ this-> data ['password']?如果是這樣,那麼問題在於因爲登錄方法也會對密碼進行加密,所以期望它以純文本形式提供。 – 2009-10-16 06:18:08

0

在你的app_controller中。PHP

function beforeFilter() { 
    $this->Auth->fields = array('username' => 'email', 'password' => 'password'); 
    $this->Auth->loginAction = array('controller'=>'users','action'=>'login'); 
    $this->Auth->loginRedirect = array('controller'=>'users','action'=>'landing'); 
    $this->Auth->logoutRedirect = array('controller'=>'users','action'=>'home'); 
} 

在用戶控制器:

function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow(list of your allowed actions); 
} 
相關問題