遇到一个问题。老系统的密码是用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) {
}
}