2015-10-09 3 views
1

им пытаются использовать Auth :: попытка ($) учетные данные в моем контроллере и вот мой пример кодаAuth :: попытка() в Laravel 4.2 надлежащего использования

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

то им имеющий ошибку, говоря только Undefined Index: Password знать, что я могу использовать любое поле для имени пользователя, но я не могу сделать это для пароля, потому что это должен быть «пароль». вещь SystemUserName и SystemUserPassword - это имена столбцов в моей базе данных. Как я могу сделать это правильно? есть идеи?

ответ

1

К сожалению, вы можете использовать только имя столбца 'password' с включенными драйверами database и eloquent, поскольку имя столбца жестко запрограммировано в поставщике. Таким образом, ваша единственная ставка - создать свой собственный пользовательский драйвер, расширив Eloquent. Это может быть сделано в четыре простых шага, как описано ниже:

1. Создайте свой собственный файл класса драйвера в 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.json в classmap разделе:

"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.

3. В файле 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 предложений и хранятся таким образом в базе данных. Если нет, то вам необходимо настроить метод validateCredentials в MyCustomUserProvider с помощью собственного метода сравнения между обычным и хешированным паролем.

+0

спасибо, попробуем это! :) – BourneShady

Смежные вопросы