2015-12-24 5 views
1

Я сделал php class that combines different hash algorithms, и я хотел бы реализовать его в методе laravel bcrypt().Как продлить метод bcrypt Laravel

Мое текущее решение для доступа к AuthController и заменить bcrypt($data['password']) на bcrypt(phashp($data['password'])), но мне интересно, если есть способ изменить метод без изменения кода в Illuminate Hashing поставщика, ни в AuthController.

Как продлить этот метод?

Спасибо!

+0

Вы можете связать свой собственный «хэш» с контейнером как «хэш». Помощник bcypt разрешает «хэш» из контейнера и называет '-> make ($ value, $ options)' на нем. – lagbox

ответ

2

Что вам нужно сделать, это перейти на config/app.php и заменить Illuminate\Hashing\HashServiceProvider::class, на заказ, и теперь вы можете установить свой пользовательский синглтон. В выше провайдера есть:

$this->app->singleton('hash', function() { 
    return new BcryptHasher; 
}); 

и вы можете сделать:

$this->app->singleton('hash', function() { 
    return new MyCustomHasher; 
}); 

и, конечно, определить MyCustomHasher класс, который будет реализовывать HasherContract интерфейс

Он должен работать без проблем, потому что когда ты посмотреть на bcrypt определение:

function bcrypt($value, $options = []) 
{ 
    return app('hash')->make($value, $options); 
} 

вы видите, что вы запускаете законченный класс, связанный с hash