如何在Laravel中获取构造函数中的当前用户ID



我正在使用laravel 5.7,但是我无法在__construct()中获得当前的用户ID。

我也尝试了AUTH:ID(),但也无法正常工作。

如何在构造函数中获取当前用户ID?

use IlluminateSupportFacadesAuth;
class TestController extends Controller
{
    public $id;
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware(function ($request, $next) {
            $this->id = Auth::user()->id;
            return $next($request);
        });
        dd($this->id);
    }
}

当前输出为null。

您只能访问封闭式中的会话。只需对此进行重构代码:

public function __construct()
{
    $this->middleware('auth');
    $this->middleware(function ($request, $next) {
        $this->id = Auth::user()->id;
        dd($this->id);
        return $next($request);
    });
}

您现在可以在控制器方法中使用值$this->id

在您的问题中,在设置了值$this->id之后,您将继续请求。由于您尝试在关闭范围之外访问$this->id,因此它仍然是DataDaDump中的null

返回后,您不会转到下一个语句,这就是为什么它不打印。

如果要使用此视图,则无需在视图中传递,您可以像这样访问记录的用户ID

{{Auth->user->id}}

如果您要在控制器中使用它,请确保您已登录。

有时会话过期,那么您将无法获得用户ID

use IlluminateSupportFacadesAuth;
class TestController extends Controller
{
    public $id;
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware(function ($request, $next) {
        $this->id = Auth::user()->id;
         dd($this->id);
        return $next($request);
       });
    }
  }

最简单的解决方案是创建中间件并在构造函数中稍后调用。

php artisan make:middleware FoobarMiddleware

我建议将别名放在kernel.php

protected $routeMiddleware = [
...
'foobar' => AppHttpMiddlewareFoobarMiddleware::class, 
]

构造函数:

public function __construct()
{
    $this->middleware('auth');
    $this->middleware('foobar');
}

我建议更改您如何创建所有内容的重点

最新更新