Laravel auth middleware генерирует исключение недопустимого типа смещения - PullRequest
0 голосов
/ 29 апреля 2020

Я недавно обновил свой проект до Laravel 7 с 5.6. Само обновление прошло без проблем, и проект находится в работоспособном состоянии. Теперь я хочу добавить аутентификацию в проект, чтобы пользователи API могли зарегистрироваться и войти в систему. Регистрация пользователя и логин работает, но как только я использую промежуточное программное обеспечение "auth", я получаю это исключение .

При установке точки останова в строке 68 AuthManager. php и пошагово проходя весь процесс с помощью xDebug, получается, что guard ($ name) вызывается с $ name, установленным в HttpRequest. Что является причиной недопустимого исключения смещения, поскольку метод resol () принимает только строки в качестве параметра.

Я не изменил AuthManager. php

мои маршруты в сети. php:

 //Routes for logged in users
 //When one of these routes gets called the exception shown above gets thrown
Route::group(['middleware' => ['auth']], function () {
    Route::get('/dev/api/developer/home', 'ApiUserController@index')->name('developer.home');
    Route::post('/dev/api/developer/requestKey', 'ApiUserController@requestKey')->name('developer.requestKey');
});

мой аутентификатор. php:

<?php

return [
'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],
'passwords' => [
    'users' => [
        'provider' => 'users',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
],
];

my Http \ Kernel. php:

<?php

namespace App\Http;

use Illuminate\Auth\Middleware\Authenticate;
use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
/**
 * The application's global HTTP middleware stack.
 *
 * These middleware are run during every request to your application.
 *
 * @var array
 */
protected $middleware = [
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
    \Fruitcake\Cors\HandleCors::class,

];

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \App\Http\Middleware\HttpsProtocol::class
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],
];

/**
 * The application's route middleware.
 *
 * These middleware may be assigned to groups or used individually.
 *
 * @var array
 */
protected $routeMiddleware = [
    'localization' => \App\Http\Middleware\localization::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];}

Кто-нибудь сталкивался с подобной проблемой? Буду признателен за любую помощь. Если вам нужна дополнительная информация, пожалуйста, сообщите мне. Спасибо всем заранее

1 Ответ

0 голосов
/ 29 апреля 2020

Я считаю, что вы должны установить защиту по умолчанию

'defaults' => [
   'guard'     => 'web',
   'passwords' => 'users',
],
...