我搜索过并发现了以下各种结果: auth()->user() is null in Laravel 5.2 和 Auth::user() returns null
但是,我仍然没有工作。
Auth::user()
在控制器中工作,但在模型中不起作用。它返回null
。
代码是:
public function scopeOwned($query) {
$query->where('user_id', '=', Auth::user()->id);
}
我尝试dd(Auth::user())
并返回null
。
任何想法?
答案 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());
}
它为我工作了!