6

我只是将作曲家更新到 Laravel 5.2 并且无法查看受密码保护的页面。基本上下面的代码行不起作用。

auth()->user() 

有人可以建议为什么这不起作用吗?

4

4 回答 4

19

确保任何需要会话(Auth 使用)的路由都位于“web”中间件组的后面。

Route::group(['middleware' => 'web'], function () {
    // your routes
});

这是 5.2 的新变化。默认情况下,路由没有应用此中间件堆栈。Web 中间件组设置会话存储、cookie 和 csrf 保护。

于 2015-12-29T04:01:24.687 回答
7

在 Laravel 5.2 升级中,使用Auth的路由必须在 web 中间件组中。

我在app/Http/Kernel.phpWeb中间件组移动到全局中间件中解决了这个问题。

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class
];
于 2016-03-20T14:25:32.927 回答
5

愿它会帮助别人。但不要忘记查看guard您使用的是什么。例如,对于管理员,您可能不会默认守卫,而是创建自己的守卫。不要忘记它。打电话\Auth::guard($guard)->user()

于 2016-10-20T08:42:43.590 回答
1

对于那些不想盲目地将中间件添加到路由的人,您只需将管理 cookie 和会话的类添加到相关的中间件组(api在我的例子中)。对我来说,那些课程:

\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,

这就是我的App\Http\Kernel::$middleWare变量最终的样子:

protected $middlewareGroups = [
    'web' => [
        ...
    ],

    'api' => [
        'throttle:60,1',
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Illuminate\Auth\Middleware\Authenticate::class
    ],
];

使用 Laravel 5.3

于 2017-06-30T08:43:51.213 回答