138 lines
3.6 KiB
PHP
138 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace Laravel\Sanctum;
|
|
|
|
use Illuminate\Auth\RequestGuard;
|
|
use Illuminate\Contracts\Http\Kernel;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Route;
|
|
use Illuminate\Support\ServiceProvider;
|
|
use Laravel\Sanctum\Console\Commands\PruneExpired;
|
|
use Laravel\Sanctum\Http\Controllers\CsrfCookieController;
|
|
use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
|
|
|
|
class SanctumServiceProvider extends ServiceProvider
|
|
{
|
|
/**
|
|
* Register any application services.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function register()
|
|
{
|
|
config([
|
|
'auth.guards.sanctum' => array_merge([
|
|
'driver' => 'sanctum',
|
|
'provider' => null,
|
|
], config('auth.guards.sanctum', [])),
|
|
]);
|
|
|
|
if (! app()->configurationIsCached()) {
|
|
$this->mergeConfigFrom(__DIR__.'/../config/sanctum.php', 'sanctum');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Bootstrap any application services.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function boot()
|
|
{
|
|
if (app()->runningInConsole()) {
|
|
$this->registerMigrations();
|
|
|
|
$this->publishes([
|
|
__DIR__.'/../database/migrations' => database_path('migrations'),
|
|
], 'sanctum-migrations');
|
|
|
|
$this->publishes([
|
|
__DIR__.'/../config/sanctum.php' => config_path('sanctum.php'),
|
|
], 'sanctum-config');
|
|
|
|
$this->commands([
|
|
PruneExpired::class,
|
|
]);
|
|
}
|
|
|
|
$this->defineRoutes();
|
|
$this->configureGuard();
|
|
$this->configureMiddleware();
|
|
}
|
|
|
|
/**
|
|
* Register Sanctum's migration files.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function registerMigrations()
|
|
{
|
|
if (Sanctum::shouldRunMigrations()) {
|
|
return $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Define the Sanctum routes.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function defineRoutes()
|
|
{
|
|
if (app()->routesAreCached() || config('sanctum.routes') === false) {
|
|
return;
|
|
}
|
|
|
|
Route::group(['prefix' => config('sanctum.prefix', 'sanctum')], function () {
|
|
Route::get(
|
|
'/csrf-cookie',
|
|
CsrfCookieController::class.'@show'
|
|
)->middleware('web')->name('sanctum.csrf-cookie');
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Configure the Sanctum authentication guard.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function configureGuard()
|
|
{
|
|
Auth::resolved(function ($auth) {
|
|
$auth->extend('sanctum', function ($app, $name, array $config) use ($auth) {
|
|
return tap($this->createGuard($auth, $config), function ($guard) {
|
|
app()->refresh('request', $guard, 'setRequest');
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Register the guard.
|
|
*
|
|
* @param \Illuminate\Contracts\Auth\Factory $auth
|
|
* @param array $config
|
|
* @return RequestGuard
|
|
*/
|
|
protected function createGuard($auth, $config)
|
|
{
|
|
return new RequestGuard(
|
|
new Guard($auth, config('sanctum.expiration'), $config['provider']),
|
|
request(),
|
|
$auth->createUserProvider($config['provider'] ?? null)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Configure the Sanctum middleware and priority.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function configureMiddleware()
|
|
{
|
|
$kernel = app()->make(Kernel::class);
|
|
|
|
$kernel->prependToMiddlewarePriority(EnsureFrontendRequestsAreStateful::class);
|
|
}
|
|
}
|