如何在laravel 8中使用md5而不是bcrypt散列密码?

如何在laravel 8中使用md5而不是bcrypt散列密码?,laravel,eloquent,laravel-7,laravel-8,laravel-datatables,Laravel,Eloquent,Laravel 7,Laravel 8,Laravel Datatables,我想用md5而不是laravel8中的bcrypt散列密码。 在我的登录控制器LoginController.php中: protected function credentials(Request $request) { return ['user_name' => $request->{$this->username()}, 'password' => md5($request->password), 'actif' =&

我想用md5而不是laravel8中的bcrypt散列密码。 在我的登录控制器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

您需要编写登录控制器

在带有AUTH软件包的Laravel 7中(Illumb\Foundation\AUTH\AuthenticatesUsers),您可以转到:

  • Http>Controllers>Auth>LoginController.php
您必须使用以下方法重写trait AuthenticatesUsers:

protected function attemptLogin(Request $request)
{
    // Your login logic
}

如果您使用其他软件包,则方法将有所不同,如果是这样,请查看软件包的文档。

阅读资源代码后,您将发现Laravel在
供应商/src/illighte/src/Auth/EloquentUserProvider中验证用户凭据。

公共函数validateCredentials(UserContract$user,array$credentials)
{
$plain=$credentials['password'];
返回$this->hasher->check($plain,$user->getAuthPassword());
}
  • 因此,首先在
    Models/User.php
  • 类用户扩展可验证性
    {
    公共函数getAuthPassword()
    {
    返回['password'=>$this->attributes['password']];
    }
    } 
    
  • 然后,添加一个自定义的
    selfeQuentUserProvider
    扩展自
    vendor/src/illighte/src/Auth/EloquentUserProvider.php
  • namespace-App\Libs;
    使用Illumb\Auth\EloquentUserProvider;
    使用Illumb\Contracts\Auth\Authenticatable;
    使用light\Support\Str;
    类SelfEloquentUserProvider扩展了EloquentUserProvider
    {
    /**
    *根据给定的凭据验证用户。
    *
    *@param\Lightning\Contracts\Auth\Authenticatable$user
    *@param数组$credentials
    */
    公共函数validateCredentials(可验证的$user,数组$credentials)
    {
    $plain=$credentials['password'];
    $authPassword=$user->getAuthPassword();
    返回hash_等于(md5($plain),$authPassword['password']);
    }
    }
    
  • 然后,在
    App/Providers/AppServiceProvider
  • 类AppServiceProvider扩展了ServiceProvider
    {
    /**
    *引导任何应用程序服务。
    *
    *@返回无效
    */
    公共函数boot()
    {
    \Auth::provider('self-elount',函数($app,$config){
    返回New\App\Libs\SelfEloquentUserProvider($App['hash',$config['model']);
    });
    }
    ......
    }
    
  • 最后,在
    config/auth.php

  • 通过这种方式,您可以轻松地自定义自己的身份验证规则。

    好的,我会尝试一下。当我在EloquentUserProvider和SelfEloquentUserProvider的validateCredentials()中添加(“消息”)时,它不起作用。它仍然会转到EloquentUserProvider的validateCredentials(),而不是SelfEloquentUserProvider。我想知道,既然MD5现在已经相当破碎和不安全,你为什么坚持使用它?
    'providers' => [
        'users' => [
            'driver' => 'self-eloquent',
            'model' => \App\User::class,
        ]
    ]