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

问题描述

我想在 laravel 8 中用 md5 而不是 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

解决方法

您需要编写 LOGIN 控制器。

在带有 AUTH 包(Illuminate\Foundation\Auth\AuthenticatesUsers)的 Laravel 7 中,你去:

  • Http > Controllers > Auth > LoginController.php

并且您必须使用以下方法重写 AuthenticatesUsers 特征:

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

如果您使用其他包,方法会有所不同,如果是这种情况,请查看您的包的文档。

,

阅读资源代码后,您会发现 Laravel 在 CREATE OR REPLACE TRIGGER "AUDIT_TRIGGER" BEFORE INSERT OR UPDATE ON Borrow FOR EACH ROW WHEN (new.Cus_evo = 0) BEGIN INSERT INTO Audit_Table VALUES (:OLD.Cus_Name,:OLD.BK_Name,:OLD.B_Date,:OLD.Loc_Name,:OLD.Cus_evo); END; / 中验证用户的凭据

vendor/src/Illuminate/src/Auth/EloquentUserProvider
  1. 因此,首先在您的 public function validateCredentials(UserContract $user,array $credentials) { $plain = $credentials['password']; return $this->hasher->check($plain,$user->getAuthPassword()); }
  2. 中添加一个 getAuthPassword 函数
Models/User.php
  1. 然后,添加自定义 class User extends Authenticatable { public function getAuthPassword() { return ['password' => $this->attributes['password']]; } } extends from SelfEloquentUserProvider
vendor/src/Illuminate/src/Auth/EloquentUserProvider.php
  1. 然后,在 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']); } }
  2. 中注册您的 SelfEloquentUserProvider
App/Providers/AppServiceProvider
  1. 最后,在您的 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

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