由于 Passport 不停的查询数据库, 为了那些性能, 从而使用redis进行缓存
特将修改的过程记录一下. 如有不对的地方, 欢迎各位能够指出错误
- 新增一个
ClientRepository
继承于Laravel\Passport\ClientRepository
改写find()
方法
namespace App\Repositories; | |
use Illuminate\Support\Facades\Cache; | |
use Laravel\Passport\ClientRepository AS BaseClientRepository; | |
use Laravel\Passport\Passport; | |
class ClientRepository extends BaseClientRepository | |
{ | |
/** | |
* Get a client by the given ID. | |
* | |
* @param int $id | |
* @return \Laravel\Passport\Client|null | |
*/ | |
public function find($id) | |
{ | |
return Cache::remember("passport:client:{$id}", 86400, | |
function () use ($id) { | |
$client = Passport::client(); | |
return $client->where($client->getKeyName(), $id)->first(); | |
} | |
); | |
} | |
} |
- 新增一个
TokenRepository
继承于Laravel\Passport\TokenRepository
改写find()
方法
namespace App\Repositories; | |
use Illuminate\Support\Facades\Cache; | |
use Laravel\Passport\Passport; | |
use Laravel\Passport\TokenRepository AS BaseTokenRepository; | |
class TokenRepository extends BaseTokenRepository | |
{ | |
/** | |
* Get a token by the given ID. | |
* | |
* @param string $id | |
* @return \Laravel\Passport\Token | |
*/ | |
public function find($id) | |
{ | |
return Cache::remember("passport:token:{$id}", 86400, | |
function () use ($id) { | |
return Passport::token()->where('id', $id)->first(); | |
} | |
); | |
} | |
} |
- 在
App\Providers
新增PassportServiceProvider
namespace App\Providers; | |
use App\Repositories\ClientRepository; | |
use App\Repositories\TokenRepository; | |
use Laravel\Passport\PassportServiceProvider as ServiceProvider; | |
use Laravel\Passport\Passport; | |
class PassportServiceProvider extends ServiceProvider | |
{ | |
/** | |
* Register the service provider. | |
* | |
* @return void | |
*/ | |
public function register() | |
{ | |
$this->registerTokenRepository(); | |
parent::register(); | |
} | |
/** | |
* Register the client repository. | |
* | |
* @return void | |
*/ | |
protected function registerClientRepository() | |
{ | |
$this->app->singleton('Laravel\Passport\ClientRepository', function ($container) { | |
$config = $container->make('config')->get('passport.personal_access_client'); | |
return new ClientRepository($config['id'] ?? null, $config['secret'] ?? null); | |
}); | |
} | |
/** | |
* Register the client repository. | |
* | |
* @return void | |
*/ | |
protected function registerTokenRepository() | |
{ | |
$this->app->singleton('Laravel\Passport\TokenRepository', function ($container) { | |
return new TokenRepository(); | |
}); | |
} | |
} |
- 在
config/app.php
中providers
添加App\Providers\PassportServiceProvider::class
后就可以使用redis进行数据缓存了
关于其他的操作, 请根据自己的实际情况去处理, 当前只做最简单的缓存操作.