Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Laravel\Sanctum;
4
 
5
use Illuminate\Auth\RequestGuard;
6
use Illuminate\Contracts\Http\Kernel;
7
use Illuminate\Support\Facades\Auth;
8
use Illuminate\Support\Facades\Route;
9
use Illuminate\Support\ServiceProvider;
10
use Laravel\Sanctum\Console\Commands\PruneExpired;
11
use Laravel\Sanctum\Http\Controllers\CsrfCookieController;
12
use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
13
 
14
class SanctumServiceProvider extends ServiceProvider
15
{
16
    /**
17
     * Register any application services.
18
     *
19
     * @return void
20
     */
21
    public function register()
22
    {
23
        config([
24
            'auth.guards.sanctum' => array_merge([
25
                'driver' => 'sanctum',
26
                'provider' => null,
27
            ], config('auth.guards.sanctum', [])),
28
        ]);
29
 
30
        if (! app()->configurationIsCached()) {
31
            $this->mergeConfigFrom(__DIR__.'/../config/sanctum.php', 'sanctum');
32
        }
33
    }
34
 
35
    /**
36
     * Bootstrap any application services.
37
     *
38
     * @return void
39
     */
40
    public function boot()
41
    {
42
        if (app()->runningInConsole()) {
43
            $this->registerMigrations();
44
 
45
            $this->publishes([
46
                __DIR__.'/../database/migrations' => database_path('migrations'),
47
            ], 'sanctum-migrations');
48
 
49
            $this->publishes([
50
                __DIR__.'/../config/sanctum.php' => config_path('sanctum.php'),
51
            ], 'sanctum-config');
52
 
53
            $this->commands([
54
                PruneExpired::class,
55
            ]);
56
        }
57
 
58
        $this->defineRoutes();
59
        $this->configureGuard();
60
        $this->configureMiddleware();
61
    }
62
 
63
    /**
64
     * Register Sanctum's migration files.
65
     *
66
     * @return void
67
     */
68
    protected function registerMigrations()
69
    {
70
        if (Sanctum::shouldRunMigrations()) {
71
            return $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
72
        }
73
    }
74
 
75
    /**
76
     * Define the Sanctum routes.
77
     *
78
     * @return void
79
     */
80
    protected function defineRoutes()
81
    {
82
        if (app()->routesAreCached() || config('sanctum.routes') === false) {
83
            return;
84
        }
85
 
86
        Route::group(['prefix' => config('sanctum.prefix', 'sanctum')], function () {
87
            Route::get(
88
                '/csrf-cookie',
89
                CsrfCookieController::class.'@show'
90
            )->middleware('web')->name('sanctum.csrf-cookie');
91
        });
92
    }
93
 
94
    /**
95
     * Configure the Sanctum authentication guard.
96
     *
97
     * @return void
98
     */
99
    protected function configureGuard()
100
    {
101
        Auth::resolved(function ($auth) {
102
            $auth->extend('sanctum', function ($app, $name, array $config) use ($auth) {
103
                return tap($this->createGuard($auth, $config), function ($guard) {
104
                    app()->refresh('request', $guard, 'setRequest');
105
                });
106
            });
107
        });
108
    }
109
 
110
    /**
111
     * Register the guard.
112
     *
113
     * @param  \Illuminate\Contracts\Auth\Factory  $auth
114
     * @param  array  $config
115
     * @return RequestGuard
116
     */
117
    protected function createGuard($auth, $config)
118
    {
119
        return new RequestGuard(
120
            new Guard($auth, config('sanctum.expiration'), $config['provider']),
121
            request(),
122
            $auth->createUserProvider($config['provider'] ?? null)
123
        );
124
    }
125
 
126
    /**
127
     * Configure the Sanctum middleware and priority.
128
     *
129
     * @return void
130
     */
131
    protected function configureMiddleware()
132
    {
133
        $kernel = app()->make(Kernel::class);
134
 
135
        $kernel->prependToMiddlewarePriority(EnsureFrontendRequestsAreStateful::class);
136
    }
137
}