【发布时间】: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