Как хешировать пароль с помощью md5 вместо bcrypt в laravel 8?
Я хочу хэшировать пароль с помощью md5 вместо bcrypt в laravel 8. В моем контроллере входа в систему LoginController.php:
protected function credentials(Request $request)
{
return ['user_name' => $request->{$this->username()}, 'password' => md5($request->password), 'actif' => 'Y'];
}
И в моем UserController у меня есть:
public function store(Request $request)
{
$this->validationRules($request);
$user = new User();
$user->password = md5("00000000");
$user->actif = 'Y';
$user->user_name = $request->input('user_name');
$user->save();
return redirect('/users');
}
Новый пользователь сохраняется в базе данных с помощью md5, но когда я пытаюсь войти в систему, он дает мне эту ошибку:
These credentials do not match with our records
2 ответа
после прочтения кода ресурса вы обнаружите, что Laravel проверяет учетные данные пользователя в
vendor/src/Illuminate/src/Auth/EloquentUserProvider
public function validateCredentials(UserContract $user, array $credentials)
{
$plain = $credentials['password'];
return $this->hasher->check($plain, $user->getAuthPassword());
}
- Итак, сначала добавьте
getAuthPassword
функция в вашемModels/User.php
class User extends Authenticatable
{
public function getAuthPassword()
{
return ['password' => $this->attributes['password']];
}
}
- затем добавьте настраиваемое расширение от
vendor/src/Illuminate/src/Auth/EloquentUserProvider.php
namespace App\Libs;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Support\Str;
class SelfEloquentUserProvider extends EloquentUserProvider
{
/**
* Validate a user against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param array $credentials
*/
public function validateCredentials(Authenticatable $user, array $credentials)
{
$plain = $credentials['password'];
$authPassword = $user->getAuthPassword();
return hash_equals(md5($plain), $authPassword['password']);
}
}
- затем зарегистрируйте свой
SelfEloquentUserProvider
вApp/Providers/AppServiceProvider
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
\Auth::provider('self-eloquent', function ($app, $config) {
return New \App\Libs\SelfEloquentUserProvider($app['hash'], $config['model']);
});
}
......
}
- наконец, в вашем
config/auth.php
'providers' => [
'users' => [
'driver' => 'self-eloquent',
'model' => \App\User::class,
]
]
таким образом вы можете легко настроить собственное правило аутентификации.
Вам нужно написать контроллер LOGIN.
В Laravel 7 с пакетом AUTH ( Illuminate \Foundation\Auth\AuthenticatesUsers) вы переходите по адресу:
- Http> Контроллеры> Auth> LoginController.php
И вам нужно переписать трейт AuthenticatesUsers следующим способом:
protected function attemptLogin(Request $request)
{
// Your login logic
}
Если вы используете другой пакет, метод будет другим, проверьте документацию вашего пакета, если это так.