【问题标题】:Get authentication data inside of Constructor issue in Laravel5.3.19在 Laravel5.3.19 的构造函数问题中获取身份验证数据
【发布时间】:2016-10-26 02:18:39
【问题描述】:

我已将 Laravel 从 4.2 升级到 laravel5.3,但我无法访问控制器构造函数中的身份验证数据

我有如下中间件,但它对我不起作用

use App\Http\Controllers\BaseController;

use Closure;
use Illuminate\Contracts\Auth\Guard;
use Redirect;
use Auth;
use App\User;


class DashboardController extends BaseController
{

    public $user;

    public function __construct(Guard $guard, User $user)
    {
        $this->middleware(function ($request, $next) {
            $this->user = Auth::user();
            return $next($request);
        });
        //$this->userID = Auth::user()?Auth::user()->id:null;

        dd($user);// Result attributes: []
        dd($guard);
        dd($this->user);

    }

}

DD()之后的结果

dd($guard);

DD($this->user);

NULL

当我 dd 用户属性时它会返回 Null。

【问题讨论】:

    标签: authentication laravel-5 laravel-5.3 illuminate-container


    【解决方案1】:

    这是意料之中的。您必须在 middleware 闭包内分配用户的原因是会话中间件尚未运行。因此,直到执行过程的后期才会真正调用您上面的闭包。

    如果您将 dd($this->user) 移动到中间件闭包内部或移动到该控制器中的其中一个路由方法中,它应该可以正常工作。

    另外,仅供参考,在您的中间件闭包中,您可以从请求中获取 user 实例,即 $request->user() 将为您提供经过身份验证的用户。

    希望对您有所帮助!

    【讨论】:

    • 我现在在想,如果我从父构造函数声明,而不是在子构造函数中调用它,有可能吗?
    猜你喜欢
    • 1970-01-01
    • 2016-11-07
    • 2022-08-20
    • 2018-08-06
    • 1970-01-01
    • 2018-06-24
    • 2021-01-10
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多