【问题标题】:Auth::user() returns null in Laravel 5.2Auth::user() 在 Laravel 5.2 中返回 null
【发布时间】:2016-05-13 10:14:24
【问题描述】:

我已经搜索并找到了如下各种结果: 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

有什么想法吗?

【问题讨论】:

  • dd时你登录了吗?
  • 确保您的模型顶部有use Illuminate\Support\Facades\Auth;
  • 我已经登录。正如我所提到的,它可以识别控制器中的用户。但是,不在模型中。另外,我使用了命名空间
  • 虽然它没有回答问题,但您应该将 $user 对象传递给模型。否则,如果您加载了一个用户并调用了作用域,它仍然会使用经过身份验证的用户(如果有的话)。

标签: laravel laravel-5 laravel-5.2


【解决方案1】:

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

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

    Auth::routes();

    // The rest of your routes

});

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

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。我正在为 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内进行此更改。

    【讨论】:

      【解决方案3】:

      谢谢你们。

      这里解决的问题: 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
      ];
      

      【讨论】:

      • 对于后代,您能否在您的答案中包含您认为有用的链接的相关部分?这样,如果链接断开、更改等,您的答案不会变得无用。非常感谢。
      • 哇,你是对的。但是,我认为阅读完整的讨论会有所帮助。
      【解决方案4】:

      我对 Laravel 5.2 也有类似的问题,尝试将 Auth::user()->id 更改为 Auth::id()

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

      它对我有用!

      【讨论】:

        猜你喜欢
        • 2017-03-17
        • 1970-01-01
        • 2019-09-20
        • 2020-08-14
        • 1970-01-01
        • 2023-02-04
        • 2021-01-02
        • 2017-06-29
        • 2016-05-11
        相关资源
        最近更新 更多