Skip to content

Instantly share code, notes, and snippets.

@hongminhbka
Forked from paulund/AppServiceProvider.php
Created July 26, 2018 11:05
Show Gist options
  • Save hongminhbka/97e635cbec92a396cd868d2bdeef1231 to your computer and use it in GitHub Desktop.
Save hongminhbka/97e635cbec92a396cd868d2bdeef1231 to your computer and use it in GitHub Desktop.
Laravel Cache Auth::user()
<?php
namespace App\Providers;
use App\Models\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
User::observe(UserObserver::class);
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
// Config/auth.php
'providers' => [
'users' => [
'driver' => 'cache-user',
'model' => App\Models\User::class,
]
]
<?php
namespace App\Providers;
use App\Auth\CacheUserProvider;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
// Caching user
Auth::provider('cache-user', function() {
return resolve(CacheUserProvider::class);
});
}
}
<?php
namespace App\Auth;
use App\Models\User;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Hashing\Hasher as HasherContract;
use Illuminate\Support\Facades\Cache;
/**
* Class CacheUserProvider
* @package App\Auth
*/
class CacheUserProvider extends EloquentUserProvider
{
/**
* CacheUserProvider constructor.
* @param HasherContract $hasher
*/
public function __construct(HasherContract $hasher)
{
parent::__construct($hasher, User::class);
}
/**
* @param mixed $identifier
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveById($identifier)
{
return Cache::get("user.$identifier") ?? parent::retrieveById($identifier;
}
}
<?php
namespace App\Observers;
use Illuminate\Foundation\Auth\User;
use Illuminate\Support\Facades\Cache;
/**
* User observer
*/
class UserObserver
{
/**
* @param User $user
*/
public function saved(User $user)
{
Cache::put("user.{$user->id}", $user, 60);
}
/**
* @param User $user
*/
public function deleted(User $user)
{
Cache::forget("user.{$user->id}");
}
/**
* @param User $user
*/
public function restored(User $user)
{
Cache::put("user.{$user->id}", $user, 60);
}
/**
* @param User $user
*/
public function retrieved(User $user)
{
Cache::add("user.{$user->id}", $user, 60);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment