Size yol göstereyim
config/app.php içerisine bakarsanız eğer Laravel Framework Service Providers kısmında
Illuminate\Hashing\HashServiceProvider::class göreceksiniz.
vendor/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php içerisine de bakarsanız orada
registeryöntemi var:
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app->singleton('hash', function () {
return new BcryptHasher;
});
}
Laravel hashing için bcrypt kullanıyor. Bu yöntemde Hash facade
BcryptHasher kullanıyor. Şimdi
vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php içerisine bakalım ne oluyor
BcryptHasher
HasherContract interface kullanıyor. O yüzden 3 yöntemi barındırmak zorunda. Bunlar
/**
* Hash the given value.
*
* @param string $value
* @param array $options
* @return string
*/
public function make($value, array $options = []);
/**
* 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 = []);
/**
* 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 = []);
Buradaki check yöntemi
password_verify ile şifre ve hashli değeri karşılaştırıyor
public function check($value, $hashedValue, array $options = [])
{
if (strlen($hashedValue) === 0) {
return false;
}
return password_verify($value, $hashedValue);
}
Sizin yapmak istediğinize göre yani şöyle bir check yöntemim olsaydı mesela:
public function check($value, $hashedValue, array $options = [])
{
if (strlen($hashedValue) === 0) {
return false;
}
return md5($value) == $hashedValue;
}
İşinizi görecekti.
Öyleyse ben HasherContract interface kullanan yeni bir Hasher yazarım mesela
// örneğin app/Services klasörü içerisine
class MD5Hasher implements HasherContract
Daha sonra bunu Hash olarak kullanabilmek için yeni bir providera ihtiyacım olacak
// app/Providers içerisine
class MD5HashServiceProvider extends HashServiceProvider {
public function register()
{
$this->app->singleton('hash', function () {
return new MD5Hasher;
});
}
}
Sonra da config/app.php içerisinde mevcut HashServiceProvider'ı kaldırıp yeni oluşturduğumu koyarım
...
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
// Illuminate\Hashing\HashServiceProvider::class,
App\Providers\MD5HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Notifications\NotificationServiceProvider::class,
...
Laravel'de kabaca işler bu şekilde yürümekte
Son olarak MD5Hasher içerisinde başarıyla giriş yapan kullanıcıları yeni bcrypt sistemine taşıyacak bir sistem kurarsanız daha iyi olur, zamanla hepsi bcrypt e geçmiş olur, sonra da MD5HashServiceProvider'ı kaldırıp tekrar HashServiceProvider'ı eklediniz mi kaldığınız yerden yeni sistemle devam edersiniz.