Intereting Posts
Как удалить постоянную ссылку старого пользовательского типа сообщений после перезаписи URL-адреса, чтобы исключить пул? Регулярное выражение и акценты / тильды В чем разница (при применении к моему коду) между INT (10) и INT (12)? Увеличение на "__toString" Отправить личное сообщение для IRC PHP. Как получить и получить важные данные из учетной записи электронной почты pop3? php echo результат при повторении через цикл Возможно ли создать приложение iphone / android на базе php с помощью PhoneGap или Appcelerator? Добавление части png pHYs в php Предел загрузки документов Достигнут предел регулярного выражения PHP (pcre.backtrack_limit) Использование метода статического класса для * Быстро * Сортировка массива по ключевым значениям в PHP Будет ли isset () возвращать false, если я назначаю NULL переменной? AJAX – Загрузка файла (HTML 5) и PHP Как заставить FormRequest возвратить json в Laravel 5.1?

Переопределить методы аутентификации laravel 4 для использования пользовательской функции hasing

У меня есть таблица в моей базе данных с пользователями. Их пароль генерируется с помощью собственной пользовательской хэш-функции.

Как переопределить методы проверки подлинности в laravel 4 для использования моего собственного класса хеширования?

Это то, что я пытался сделать:

class CustomUserProvider implements Illuminate\Auth\UserProviderInterface { public function retrieveByID($identifier) { return $this->createModel()->newQuery()->find($identifier); } public function retrieveByCredentials(array $credentials) { // First we will add each credential element to the query as a where clause. // Then we can execute the query and, if we found a user, return it in a // Eloquent User "model" that will be utilized by the Guard instances. $query = $this->createModel()->newQuery(); foreach ($credentials as $key => $value) { if ( ! str_contains($key, 'password')) $query->where($key, $value); } return $query->first(); } public function validateCredentials(Illuminate\Auth\UserInterface $user, array $credentials) { $plain = $credentials['password']; return $this->hasher->check($plain, $user->getAuthPassword()); } } class CodeIgniter extends Illuminate\Auth\Guard { } App::bind('Illuminate\Auth\UserProviderInterface', 'CustomUserProvider'); Auth::extend('codeigniter', function() { return new CodeIgniter( App::make('CustomUserProvider'), App::make('session')); }); 

Когда я запускаю метод Auth :: try, я получаю эту ошибку: ErrorException: Warning: тип незаконного смещения в isset или пустой в G: \ Dropbox \ Workspaces \ www \ video \ vendor \ laravel \ framework \ src \ Illuminate \ Foundation \ Application .php строка 352

Вот как это удалось решить проблему:

библиотеки \ CustomHasherServiceProvider.php

 use Illuminate\Support\ServiceProvider; class CustomHasherServiceProvider extends ServiceProvider { public function register() { $this->app->bind('hash', function() { return new CustomHasher; }); } } 

библиотеки \ CustomHasher.php

 class CustomHasher implements Illuminate\Hashing\HasherInterface { private $NUMBER_OF_ROUNDS = '$5$rounds=7331$'; public function make($value, array $options = array()) { $salt = uniqid(); $hash = crypt($password, $this->NUMBER_OF_ROUNDS . $salt); return substr($hash, 15); } public function check($value, $hashedValue, array $options = array()) { return $this->NUMBER_OF_ROUNDS . $hashedValue === crypt($value, $this->NUMBER_OF_ROUNDS . $hashedValue); } } 

И затем я заменил «Illuminate \ Hashing \ HashServiceProvider» на «CustomHasherServiceProvider» в массиве поставщиков в app / config / app.php

и добавлено «приложение / библиотеки» для автозагрузки classmap в composer.json

@vFragosop был на правильном пути с расширением Auth .

Есть несколько способов скинуть кошку, и вот как я буду делать это, не заменяя класс Hasher по умолчанию:

Включите в app/routes.php или где угодно:

 use Illuminate\Auth\Guard; Auth::extend("eloquent", function() { return new Guard( new \Illuminate\Auth\EloquentUserProvider(new CustomHasher(), "User"), App::make('session.store') ); }); 

Создание и автозагрузка класса CustomHasher (например, app/libraries/CustomHasher.php ):

 class CustomHasher extends Illuminate\Hashing\BcryptHasher { public function make($value, array $options = array()) { ... } public function check($value, $hashedValue, array $options = array()) { ... } } 

Вот и все.

Предупреждение: я не могу гарантировать, что это работает из коробки, и здесь может быть несколько ошибок. Имейте в виду, что Laravel 4 все еще находится на стадии разработки. Хотел бы я дать более точный ответ, но кодовая база по-прежнему переживает множество изменений, и не все правильно документировано. В любом случае, вы ищете что-то вроде этого:

 // on config/auth.php 'driver' => 'custom' 
 // on start/global.php Auth::extend('custom', function() { // CustomUserProvider is your custom driver and should // implement Illuminate\Auth\UserProviderInterface; return new Guard(new CustomUserProvider, App::make('session')); }); 

Если это не дает вам достаточной информации для начала, вы должны понять это, взглянув на эти классы ниже:

EloquentUserProvider и DatabaseUserProvider
Эти классы являются поддерживаемыми в настоящее время драйверами проверки подлинности. Они должны помочь вам создать свой CustomUserProvider (или любое CustomUserProvider имя, которое вам нравится на самом деле).

Менеджер
Это базовый класс для всего, что принимает пользовательские драйверы (включая AuthManager ). Он предоставляет методы для их регистрации, как в Laravel 3.