2013-04-24 218 views
9

我有一個Laravel 4應用程序,我在其中設置了一個用戶。在我的登錄路線中,我使用電子郵件和密碼撥打Auth::attempt,但它總是返回爲假。我確定密碼正確並且數據庫中的正確哈希值爲Hash::check返回true。Laravel 4身份驗證不起作用

我認爲這可能是由於使用email作爲登錄字段而不是username,但我看不到任何設置。 This question表示您可以將選項添加到config/auth.php,但它不起作用。 This question表示使用username作爲數組鍵,但後來我得到SQL錯誤,因爲它試圖在數據庫中的用戶名字段上進行選擇。

我是否需要向用戶模型添加一些內容以指定用戶名字段?這裏是我的登錄路線:

Route::post('login', function() { 

    // data from login form 
    $credentials = array(
     'email' => Input::get('email'), 
     'password' => Input::get('password') 
    ); 

    $auth = Hash::check(Input::get('password'), Hash::make('mypass')); 
    var_dump($auth); // this is TRUE 

    // login was good 
    $auth = Auth::attempt($credentials); 
    var_dump($auth); // this is FALSE 
}); 
+2

數組鍵應該與用於驗證數據庫中用戶的列對應。這在[docs](http://four.laravel.com/docs/security#authenticating-users)中提到。你是否更改過L4附帶的默認'User'模型? – 2013-04-24 01:00:22

回答

11

我發現這個問題。正如Jason在上面的評論中所建議的那樣,我修改了models/User.php文件並刪除了一些我沒有意識到的功能。

getAuthIdentifier()getAuthPassword()方法必須包含在User模型中進行驗證!

+3

他們這樣做。該模型還必須實現'UserInterface'和'RemindableInterface'。 – 2013-04-25 04:41:47

6

在app/config/app.php中,確保你有'key'設置。這讓我把頭髮拉出來。一切都會好起來的,密碼似乎在數據庫中散列,但它總是會返回false,直到您設置此密鑰並將密碼重新哈希到數據庫中。

「PHP工匠鍵:產生」

+0

非常感謝你。我使用Jeffery Way的Laravel 4 Generator,在我開始編寫路由和控制器之前,我完全忘記了Laravel安裝中的這個關鍵點。 – 2013-10-04 06:14:49

1

有同樣的問題,讓我汗了幾個小時。明確檢查你的User.php模型,並確保你沒有覆蓋默認的一個。謝謝傑森!