Laravel 5.3+ 控制器里如何获取登录用户

应该不少同学都遇到这个问题了:5.3 起,由于框架运行流程的修改,你无法在控制器的构造函数里获取登录用户,那么我们怎么办呢?以下是几个方法:

  1. 不再从构造函数取用户

    我们可以从 request 中获取登录用户:request()->user()

  2. 或者在控制器方法里我们使用 Auth::user()

除了上面的折中的办法,我们一定要在构造函数搞定的话那么请看这里:

protected $user;

public function __construct()
{
    $this->middleware(function ($request, $next) {
        $this->user = $request->user();

        return $next($request);
    });
}

这样你就可以在其它方法里使用 $this->user 来访问当前登录用户了。

FYI: [5.3] Controller closure middleware

本帖已被设为精华帖!
本帖由系统于 6年前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

原来还能从控制器的构造函数里面获取登录用户。可惜没有机会体验了。

7年前 评论

正好被此问题困扰,我都想用Service Container搞Controllers共享$user变量了。

6年前 评论

我直接这样写:
``` public function __construct()
{
dd(Auth::user());
}


返回的是 null ,这是什么原因呢? 已经登录的~
6年前 评论

@Larwas 上面不是说了在 __construct 里拿不到登录信息吗?

6年前 评论

@overtrue 噢噢, 我看错了. 谢谢, 那可以在路由设置那里获取么, 设置某个用户才能访问某个路由.

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!