在 Laravel5.3.19 中获取构造函数内部的身份验证数据
Get authentication data inside of Constructor issue in Laravel5.3.19
我已将 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
当我添加用户 属性 时它将 return 为空。
这是意料之中的事情。您必须在 middleware
闭包内分配用户的原因是因为会话中间件还没有 运行。因此,您上面的闭包直到执行过程的后期才会真正被调用。
如果您将 dd($this->user)
移动到中间件闭包内部或移动到该控制器中的其中一个路由方法,它应该可以正常工作。
此外,仅供参考,在您的中间件闭包中,您可以从请求中获取 user
实例,即 $request->user()
将为您提供经过身份验证的用户。
希望对您有所帮助!
我已将 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
当我添加用户 属性 时它将 return 为空。
这是意料之中的事情。您必须在 middleware
闭包内分配用户的原因是因为会话中间件还没有 运行。因此,您上面的闭包直到执行过程的后期才会真正被调用。
如果您将 dd($this->user)
移动到中间件闭包内部或移动到该控制器中的其中一个路由方法,它应该可以正常工作。
此外,仅供参考,在您的中间件闭包中,您可以从请求中获取 user
实例,即 $request->user()
将为您提供经过身份验证的用户。
希望对您有所帮助!