Laravel 5.7 auth поведение - PullRequest
       15

Laravel 5.7 auth поведение

0 голосов
/ 24 декабря 2018

Я новичок в Laravel и уже несколько дней отслеживаю его код, чтобы понять его поведение, но безрезультатно.

Предположим, что я добавляю промежуточное ПО для маршрута, подобного этому

Route::group(["middleware" => ["web", "auth:web", "auth:custom"]], function() {
    Route::view("/about", "about");
});
  1. Идет ли маршрут /about через auth:web, за которым следует auth:custom?Если нет, каково поведение?

  2. Как мне создать auth:custom охранника, который не конфликтует с auth:web?Текущее поведение таково: если auth:web аутентифицирован, auth:custom следует за его состоянием, я подозреваю, что они используют одну и ту же переменную сеанса.

Я действительно новичок в Laravel ипохоже, что это сочетание маршрута, аутентификации и промежуточного программного обеспечения.Надеюсь, кто-то может указать мне в правильном направлении.Спасибо.

1 Ответ

0 голосов
/ 24 декабря 2018

1 - Ваш маршрут будет использовать промежуточное ПО от App\Providers\RouteServiceProvider.См .:

/**
 * Define the "web" routes for the application.
 *
 * These routes all receive session state, CSRF protection, etc.
 *
 * @return void
 */
protected function mapWebRoutes()
{
    Route::middleware('web')
         ->namespace($this->namespace)
         ->group(base_path('routes/web.php'));
}

Все написанное вами промежуточное программное обеспечение будет выполняться в указанном вами порядке.В случае сбоя одного промежуточного программного обеспечения $next($request); вызываться не будет.Таким образом, следующее промежуточное программное обеспечение не будет активировано.

2- Эти промежуточные программы auth:web и auth:custom являются вызовами 'auth middleware', но с другими параметрами.Все, что после : отправляется для обработки метода промежуточного программного обеспечения в качестве параметров.

Промежуточное программное обеспечение аутентификации определяется в App\Http\Kernel class в $routeMiddleware var:

'auth' => \Illuminate\Auth\Middleware\Authenticate::class,

и здесьэто метод handle:

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  string[]  ...$guards
 * @return mixed
 *
 * @throws \Illuminate\Auth\AuthenticationException
 */
public function handle($request, Closure $next, ...$guards)
{
    $this->authenticate($guards);

    return $next($request);
}

Ваш параметр 'web' или 'custom' переходит в параметр ... $ guards.

Между прочим, нет предопределенного 'custom'охранник.Вы должны написать свой собственный защитный элемент и определить его в массиве config/auth.php, guards:

'guards' => [
    'web' => [ // This is the web guard (auth:web)
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [ // and this the api guard (auth:api)
        'driver' => 'token',
        'provider' => 'users',
    ],
],

Затем вы можете ожидать, что промежуточное программное обеспечение для аутентификации laravel будет проходить аутентификацию с использованием вашего специального защитного элемента, например auth:custom или * 1030.*.

...