Ответ 1
Вам придется переписать модуль Hash
. Благодаря идеям Laravel следующих концепций IoC и Dependency Injection, это будет относительно легко.
Сначала создайте папку app/libraries
и добавьте ее в композитор autoload.classmap
:
"autoload": {
"classmap": [
// ...
"app/libraries"
]
},
Теперь, когда мы создаем наш класс. Создайте класс SHAHasher
, реализуя Illuminate\Hashing\HasherInterface
. Нам нужно реализовать три метода: make
, check
и needsRehash
.
Примечание: На Laravel 5 используйте Illuminate/Contracts/Hashing/Hasher
вместо Illuminate\Hashing\HasherInterface
.
приложения/библиотеки/SHAHasher.php
class SHAHasher implements Illuminate\Hashing\HasherInterface {
/**
* Hash the given value.
*
* @param string $value
* @return array $options
* @return string
*/
public function make($value, array $options = array()) {
return hash('sha1', $value);
}
/**
* Check the given plain value against a hash.
*
* @param string $value
* @param string $hashedValue
* @param array $options
* @return bool
*/
public function check($value, $hashedValue, array $options = array()) {
return $this->make($value) === $hashedValue;
}
/**
* Check if the given hash has been hashed using the given options.
*
* @param string $hashedValue
* @param array $options
* @return bool
*/
public function needsRehash($hashedValue, array $options = array()) {
return false;
}
}
Теперь, когда мы выполнили свой класс, мы хотим, чтобы он использовался по умолчанию, Laravel. Для этого создадим SHAHashServiceProvider
, расширяя Illuminate\Support\ServiceProvider
и зарегистрируем его как компонент Hash
:
приложения/библиотеки/SHAHashServiceProvider.php
class SHAHashServiceProvider extends Illuminate\Support\ServiceProvider {
/**
* Register the service provider.
*
* @return void
*/
public function register() {
$this->app['hash'] = $this->app->share(function () {
return new SHAHasher();
});
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides() {
return array('hash');
}
}
Прохладный, теперь все, что нам нужно сделать, это убедиться, что наше приложение загружает правильного поставщика услуг. В app/config/app.php
, под providers
, удалите следующую строку:
'Illuminate\Hashing\HashServiceProvider',
Затем добавьте следующее:
'SHAHashServiceProvider',