我看到了一些行为。通过Laravel类中的Auth
门面访问用户数据时无法解释。这是我的代码的摘录:
private $data;
private $userID;//Set property
function __construct()
{
$this->middleware('auth');//Call middleware
$this->userID = Auth::id();//Define property as user ID
}
public function index() {
return view('');
}
public function MyTestMethod() {
echo $this->userID;//This returns null
echo Auth::id();//This works & returns the current user ID
}
我已登录并在类中包含use Illuminate\Support\Facades\Auth;
,因此代码可以正常工作,但只有在方法中访问Auth
时才会生效 - 否则会返回null
值。
最奇怪的是,我无法解决造成这种情况的原因。任何想法都一如既往地赞赏。提前谢谢!
答案 0 :(得分:0)
在Laravel Laravel 5.3.4或更高版本中,您无法访问控制器构造函数中的会话或经过身份验证的用户,因为middlware尚未运行。
作为替代方案,您可以直接在控制器的构造函数中定义基于Closure的中间件。:
试试这个:
function __construct()
{
$this->middleware(function ($request, $next) {
if (!auth()->check()) {
return redirect('/login');
}
$this->userID = auth()->id(); // or auth()->user()->id
return $next($request);
});
}
另一种替代解决方案是你的基本控制器类并添加__get
函数,如下所示:
class Controller
{
public function __get(string $name)
{
if($name === 'user'){
return Auth::user();
}
return null;
}
}
现在如果您当前的控制器可以像$this->user
那样使用它:
class YourController extends Controller
{
public function MyTestMethod() {
echo $this->user;
}
}
答案 1 :(得分:0)
你应该试试这个:
function __construct() {
$this->userID = Auth::user()?Auth::user()->id:null;
}
OR
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->userID = Auth::user()->id;
return $next($request);
});
}