在Laravel 5.2中,auth() - > user()为null

时间:2015-12-29 03:38:03

标签: php laravel laravel-5.1 laravel-5.2

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

auth()->user() 

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

4 个答案:

答案 0 :(得分:17)

确保所有需要会话的路由(Auth使用的路径)都位于' 中间件组之后。

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

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

答案 1 :(得分:6)

在Laravel 5.2升级中,使用验证的路由必须位于Web中间件组中。

我在 app / Http / Kernel.php web 中间件组移至全局中间件中解决了这个问题。

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
];

答案 2 :(得分:2)

愿它能帮到别人。但是别忘了看看你使用的guard是什么。例如,对于管理员,您可能不会默认保护,但创建自己的。不要忘记它。致电\Auth::guard($guard)->user()

答案 3 :(得分:0)

对于那些不想盲目地向路由添加中间件的人,您只需要添加管理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