【问题标题】:Laravel auth middleware throws illegal offset type exceptionLaravel auth 中间件抛出非法偏移类型异常
【发布时间】:2020-04-29 12:49:42
【问题描述】:

我最近将我的项目从 5.6 升级到了 Laravel 7。 升级本身没有任何问题,项目处于可用状态。现在我想为项目添加身份验证,以便 API 用户可以注册和登录。 注册用户和登录是有效的,但是一旦我使用“auth”中间件,我就会得到这个exception

当在 AuthManager.php 的第 68 行设置断点并使用 xDebug 逐步完成整个过程时,结果发现,在 $name 设置为 HttpRequest 的情况下调用了 guard($name)。这就是非法偏移异常的原因,因为 resolve() 方法只接受字符串作为参数。

我没有修改 AuthManager.php

我在 web.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');
});

我的 auth.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,
    ],
],
];

我的 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,
];}

有没有人遇到过类似的问题?我会很感激任何帮助。如果您需要任何其他信息,请告诉我。先谢谢大家了

【问题讨论】:

  • 你解决了吗?这也发生在我身上
  • 嗨,卡罗,不,我无法解决这个问题。我的项目不够大,以至于我无法在新的 laravel 版本中重做它。我很确定对我来说这种行为的原因是更新过程。我一定是在路上的某个地方走错了路。祝你好运,也许你会找到解决办法!

标签: php laravel upgrade middleware laravel-7


【解决方案1】:

我相信你应该设置一个默认的守卫

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

【讨论】:

  • 很抱歉给您带来了困惑。我在格式化问题时不小心删除了默认部分。默认保护设置在 auth.php
【解决方案2】:

我遇到了完全相同的问题。经过一番搜索,我发现了问题:

App\Http\Kernal.php是文件底部的一个数组。

由于某种原因,authauth.basis 键的 capital letter 如下所示:

如果你把它写成小写,它会再次起作用(至少在我的情况下)。

【讨论】:

    猜你喜欢
    • 2021-05-29
    • 2019-05-03
    • 2018-12-23
    • 2016-02-08
    • 2020-10-21
    • 2019-07-16
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多