2014-08-29 81 views
0

我已經安裝了Laravel 4.2,但遇到了一個問題,其中'Auth :: attempt()'函數不願讓用戶進入,但我可以使用'Auth :: loginUsingId()'功能登錄。Laravel 4 - Auth :: attempt()不工作並返回FALSE

我的用戶模型

<?php 

use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableInterface; 

class User extends Eloquent implements UserInterface, RemindableInterface { 

     public $timestamps = false; 
     protected $table = 'user'; 
     protected $primaryKey = 'user_id'; 

     protected $hidden = array('user_pass', 'remember_token'); 

     public function getAuthIdentifier(){ 
      return $this->getKey(); 
     } 

     public function getAuthPassword(){ 
      return $this->user_pass; 
     } 

     public function getRememberToken(){ 
      return $this->user_remembertoken; 
     } 

     public function setRememberToken($value){ 
      $this->user_remembertoken = $value; 
     } 


     public function getRememberTokenName(){ 
      return "user_remembertoken"; 
     } 

     public function getReminderEmail(){ 
      return $this->user_email; 
     } 
} 

我的路線(我已經把一些的exaple)

Route::get('login', function(){ 
     $user = 'dd'; 
     $pass = '123456'; 
     $credentials =["user_nickname" => "dd","user_pass" => "123456"]; 
     if(Auth::attempt($credentials)){ 
      echo 'Login Successful'; 
     } 
     else{ 
      echo 'Login Failed'; 
     } 
}); 

Route::get('check', function() 
{ 
if(Auth::check()){echo 'identified';} 
else{echo 'not identified';} 
return; 
}); 

Route::get('reg', function() 
{ 
    $user = new User; 
    $user->user_nickname = 'dd'; 
    $user->user_pass = Hash::make('123456'); 
    $user->user_realname = 'dd'; 
    $user->user_email = '[email protected]'; 
    $user->user_accesslevel = 1; 
    $user->user_language = 'HU'; 

    $user->save(); 
}); 



Route::get('forcelogin', function() 
{ 
Auth::loginUsingId(6,TRUE); 
return; 
}); 

我的數據庫

user_id | smaillint 
user_nickname | varchar(25) 
user_pass | char(60) 
user_email | varchar(255) 
user_realname | varchar(60) 
user_accesslevel | tinyint(3) 
user_language | char(2) 
user_regdate | timestamp 
user_remembertoken | char(60) 
+0

提示:請做一個更好的數據庫設計,當你有一個表「用戶」和一列「ID」它顯然意味着用戶的ID,你不必指定爲user_id。同樣適用於您提到的每一列。 $ user-> id比$ user-> user_id更有意義。 – thegeekajay 2014-08-29 13:39:01

回答

1

用戶密碼列必須是'密碼'。這是硬編碼到Laravel並且不可配置(即使使用getAuthPassword()函數)。

所以從

user_pass | char(60) 

改變你的數據庫遷移到

password | varchar(60) 

,改變

$user->user_pass = Hash::make('123456'); 

$user->password = Hash::make('123456'); 

當註冊用戶,它會工作。

+0

謝謝,工作。 由於brypt總是返回60個字符,char(60)現在更適合varchar(60)。 http://stackoverflow.com/questions/1885630/whats-the-difference-between-varchar-and-char – dragon1993 2014-08-29 14:56:06

0

將用戶密碼列字段從字符(60)更改爲「varchar 255」刪除用戶密碼哈希重新創建它並試一試!

相關問題