Auth :: user()在Laravel 5.2中返回null

时间:2016-02-04 00:08:32

标签: laravel laravel-5 laravel-5.2

我搜索过并发现了以下各种结果: auth()->user() is null in Laravel 5.2Auth::user() returns null

但是,我仍然没有工作。

Auth::user()在控制器中工作,但在模型中不起作用。它返回null

代码是:

public function scopeOwned($query) {
    $query->where('user_id', '=', Auth::user()->id);
}

我尝试dd(Auth::user())并返回null

任何想法?

4 个答案:

答案 0 :(得分:5)

谢谢你们。

问题在这里解决了: https://laracasts.com/discuss/channels/laravel/authuser-returns-null-in-laravel-52

我必须直接将堆栈添加到中间件中(不在组中)。

在/Http/kernel.php中:

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

答案 1 :(得分:1)

我有类似的问题。我正在为API组定义一个自定义中间件,而Auth总是显示为null。

我通过在自定义之前加载EncryptCookies中间件来修复此问题。

'api' => [
    \App\Http\Middleware\EncryptCookies::class,
    \App\Http\Middleware\VerifyParametersMiddleware::class, // your custom middleware, load after EncryptCookies
    'throttle:60,1',
    'bindings',
],

此更改可在Kernel.php内完成。

答案 2 :(得分:0)

从接受的答案链接到的Process.Start,我发现以下解决方案可以工作。编辑/routes/web.php文件,并用Route::group('middleware' => 'web'])包围现有路线,如下所示:

Route::group(['middleware' => 'web'], function () {

    Auth::routes();

    // The rest of your routes

});

据我了解,这不会有任何安全性或其他影响,因为它只是在处理所包含的路由之前加载web中间件。如果有人知道安全性或其他问题/后果,请在此答案的评论中发布它们。

答案 3 :(得分:-1)

我在Laravel 5.2上遇到类似问题,尝试将Auth :: user() - > id更改为Auth :: id()

public function scopeOwned($query) {
    $query->where('user_id', '=', Auth::id());
}

它为我工作了!