Laravel 5.6在控制器构造函数中如何访问auth()->user()?

7

我试图在控制器构造函数中访问auth()->user(),但它总是返回null

我尝试了以下方法,但没有成功!

protected $user;

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

        return $next($request);
    }); 

}

有没有办法做到这一点?--谢谢

是的,它绑定在路由中。 - Kalim
Route::group(['middleware' => ['auth', 'web']], function () {Route::resource('users', 'UsersController');}); - Kalim
你尝试过使用\Auth::user()吗? - SaidbakR
1
是的,我已经尝试了所有的事情,总是得到 null 值。 - Kalim
你是否尝试过使用 $request->user() 来检查 user 是否存在,而不是使用 auth()->user() - matiaslauriti
显示剩余4条评论
3个回答

4

控制器构造函数在中间件之前被调用,因此您无法在Constructor()中获取用户信息。

我的建议是创建一个私有函数来设置用户,并在您的函数内部调用它。


0
感谢@Ts8060的建议,我有了创建一个单例来实现这个功能的想法。
/** @var User */
private static $user;

/**
 * Singleton
 *
 * @return User
 */
public function getUser() {
    if(empty(static::$user)) {
        static::$user = Auth::user();
    }

    return static::$user;
}

这段代码为什么会起作用?我应该把这段代码放在哪里?请详细说明。 - Binar Web

-2

我认为身份验证中间件在创建控制器之后运行,您可以在控制器中执行类似以下的操作

public function callAction($method, $parameters)
{
    $this->middleware(function ($request, $next) {
       $this->user = auth()->user();

       return $next($request);
    }); 

    return parent::callAction($method, $parameters);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接