2025-04-14

遇到一个问题。老系统的密码是用md5加密。现在要用Laravel读取老系统数据库并编写API. 这就需要修改密码验证器了。

打开config/auth.php

将users.driver 修改为custom

    'providers' => [
        'users' => [
            'driver' => 'custom',
            'model' => env('AUTH_MODEL', App\Models\User::class),
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

进入bootstrap/providers.php 增加一个providers

<?php

return [
    ....,
    App\Providers\AuthServiceProvider::class,
];

 

创建文件app/Providers/AuthServiceProvider.php

<?php
namespace App\Providers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * Register any application authentication / authorization services.
     *
     * @return  void
     */
    public function boot()
    {
        $this->registerPolicies();

        Auth::provider('custom', function ($app, array $config) {

            // Return an instance of Illuminate\Contracts\Auth\UserProvider...
            return new AuthProvider();
        });
    }
}

 

然后再创建AuthProvider.app/Providers/AuthProvider.php

<?php
namespace App\Providers;

use App\Models\User;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider;

class AuthProvider implements UserProvider
{
    public function retrieveById($identifier) {
        return Administrator::find($identifier)->first();
    }
    public function retrieveByToken($identifier, $token) {
    }
    public function updateRememberToken(Authenticatable $user, $token) {
        return $user->setRememberToken($token);
    }
    public function retrieveByCredentials(array $credentials) {
        if (empty($credentials)) {
            return;
        }
        $user = User::where('username', $credentials['username'])->first();
        return $user;
    }
   // 此处为自定义认证
    public function validateCredentials(Authenticatable $user, array $credentials) {
        return md5($credentials['username'] . md5($credentials['password'])) == $user->getAuthPassword();
    }
    public function rehashPasswordIfRequired(Authenticatable $user, array $credentials, bool $force = false) {
    }

}

 

标签: Laravel