2015-10-09 49 views
1

我嘗試使用驗證::試圖在我的控制器($憑證),這裏是我的示例代碼驗證::嘗試()在laravel 4.2正確使用

$credentials= [ 
     'SystemUserName'  => Input::get('username'), 
     'SystemUserPassword' => Input::get('password') 
    ]; 

然後即時通訊有錯誤說只有Undefined Index: Password要知道我可以使用任何字段的用戶名,但我不能這樣做的密碼,因爲它應該是'密碼'。東西是SystemUserNameSystemUserPassword是我的數據庫中的列名稱。我如何正確地做到這一點?有任何想法嗎?

回答

1

不幸的是,只能使用'password'列名稱與包含的databaseeloquent驅動程序,因爲列名是在用戶提供程序中硬編碼的。所以你唯一的選擇就是通過擴展Eloquent來創建你自己的定製驅動。這四個簡單的步驟來完成下面的解釋:

創建app/extensions/CustomUserProvider.php文件自定義驅動程序類文件包含以下內容:

use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\EloquentUserProvider; 
use Illuminate\Auth\UserProviderInterface; 

class MyCustomUserProvider extends EloquentUserProvider implements UserProviderInterface { 

    public function retrieveByCredentials(array $credentials) 
    { 
     $query = $this->createModel()->newQuery(); 

     foreach ($credentials as $key => $value) { 
      if ($key != 'SystemUserPassword') $query->where($key, $value); 
     } 

     return $query->first(); 
    } 

    public function validateCredentials(UserInterface $user, array $credentials) 
    { 
     return $this->hasher->check($credentials['SystemUserPassword'], $user->SystemUserPassword); 
    } 
} 

2.添加"app/extensions"composer.jsonclassmap部分:

"autoload": { 
    "classmap": [ 
     "app/commands", 
     "app/controllers", 
     "app/models", 
     "app/database/migrations", 
     "app/database/seeds", 
     "app/tests/TestCase.php", 
     "app/extensions" // <-- add this line here 
    ] 
}, 

然後運行php composer dump-autoload

在你app/start/global.php文件內容添加到您的註冊自定義驅動程序:

Auth::extend('mydriver', function($app) 
{ 
    return new MyCustomUserProvider($app['hash'], Config::get('auth.model')); 
}); 

4.然後,只需設置驅動程序在你的app/config/auth.php這樣:

'driver' => 'mydriver', 

這經過測試,工作得很好。


你要知道,這將工作假設你的用戶密碼與Hash::make()方法Laravel報價進行散列並存儲在數據庫中的方式。如果不是,那麼您需要使用自己的普通和散列密碼之間的比較方法調整MyCustomUserProvider中的validateCredentials方法。

+0

謝謝你會試試這個! :) – BourneShady