Как я могу использовать хеширование MD5 для паролей в Laravel?

Я переношу устаревшее приложение в Laravel. Старое приложение использовало MD5 для хеширования паролей без соли, поэтому мне нужно повторить это в Laravel. Для записи мы меняем пароли на bcrypt с солью, но это не простой процесс, и для этого требуется логин пользователя – пока мне просто нужно, чтобы логины работали с устаревшими хэшами.

Я выполнил это руководство, чтобы преобразовать Auth::hash в MD5: как использовать шифрование SHA1 вместо BCrypt в Laravel 4?

Когда я распечатываю пароль в виде обычного текста и сгенерированного хэша в моем методе make при регистрации учетной записи:

 public function make($value, array $options = array()) { echo $value.'<br>'.hash('md5', $value); exit; return hash('md5', $value); } 

Я получаю следующее:

 123456 e10adc3949ba59abbe56e057f20f883e 

Отлично, вот что мне нужно. Однако, когда это сохраняется в базе данных, я получаю совсем другой хэш. Я предполагаю, что Laravel засовывает пароль в другом месте, но я не могу найти, где и как переопределить это.

Мой файл MD5Hasher.php внутри app/libraries :

 <?php class MD5Hasher implements Illuminate\Contracts\Hashing\Hasher { /** * Hash the given value. * * @param string $value * @return array $options * @return string */ public function make($value, array $options = array()) { return hash('md5', $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; } } 

Мой MD5HashServiceProvider.php :

 <?php class MD5HashServiceProvider extends Illuminate\Support\ServiceProvider { /** * Register the service provider. * * @return void */ public function register() { $this->app['hash'] = $this->app->share(function () { return new MD5Hasher(); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return array('hash'); } } 

Мой AuthController.php выглядит следующим образом:

 <?php namespace App\Http\Controllers\Auth; use Hash; use App\User; use Validator; use Mail; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\ThrottlesLogins; use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; class AuthController extends Controller { /* |-------------------------------------------------------------------------- | Registration & Login Controller |-------------------------------------------------------------------------- | | This controller handles the registration of new users, as well as the | authentication of existing users. By default, this controller uses | a simple trait to add these behaviors. Why don't you explore it? | */ use AuthenticatesAndRegistersUsers, ThrottlesLogins; //protected $redirectTo = '/account'; /** * Create a new authentication controller instance. * * @return void */ public function __construct() { $this->middleware('guest', ['except' => 'getLogout']); } /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator */ protected function validator(array $data) { return Validator::make($data, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|confirmed|min:6', ]); } /** * Create a new user instance after a valid registration. * * @param array $data * @return User */ protected function create(array $data) { $this->redirectTo = '/register/step-1'; $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); // email the user Mail::send('emails.register', ['user' => $user], function($message) use ($user) { $message->to($user->email, $user->name)->subject('Edexus - Welcome'); }); // email the admin Mail::send('emails.register-admin', ['user' => $user], function($message) use ($user) { $message->to('admins@***.com', 'Edexus')->subject('Edexus - New user sign up'); }); return $user; } } 

Проверьте мутатор паролей в своей модели пользователей. Это хэширование пароля в другой раз после его использования в контроллере.

Моя рекомендация – хэш-пароль один раз в ваших событиях создания create () и update () и удалить его из мутатора и контроллера.

step1: создайте папку приложений / библиотек и добавьте ее в файл autoload.classmap

 "autoload": { "classmap": [ // ... "app/libraries" ] }, 

Шаг 2: создайте два php-файла MD5Hasher.php и MD5HashServiceProvider в приложениях / библиотеках MD5Hasher.php

 <?php namespace App\Libraries; use Illuminate\Contracts\Hashing\Hasher; class MD5Hasher implements Hasher { /** * Hash the given value. * * @param string $value * @return array $options * @return string */ public function make($value, array $options = array()) { return md5($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; } } 

MD5HashServiceProvider.php

 <?php namespace App\Libraries; use Illuminate\Support\ServiceProvider; class MD5HashServiceProvider extends ServiceProvider { /** * Register the service provider. * * @return void */ public function register() { // $this->app['hash'] = $this->app->share(function () { // return new MD5Hasher(); // }); $this->app->singleton('hash', function () { return new MD5Hasher(); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return array('hash'); } 

step3: Скрыть или удалить «Illuminate \ Hashing \ HashServiceProvider :: class» в config / app.php и добавить «App \ Libraries \ MD5HashServiceProvider :: class»