Laravel-事件:如何在事件中使用Auth::user()?
Laravel-Event: How to use Auth::user() in a Event?
当我在 CandidateEvent 中询问 if(Auth::user()->role == "xxxx") 时显示 "Trying to get property of non-object"
问题是组件 Auth::user() 在我的事件中不起作用。
在活动中使用 Auth 的正确方法是什么?
public function __construct()
{
if(Auth::user()->role == "XXXX")
{
$candidate = count(Candidate::CountNewCandidate());
}
else
{
$candidate = count(Candidate::CountNewCandidateGroup());
}
$this->data = [ 'cCandidate' => $candidate ];
}
您似乎没有为 Auth facade 导入命名空间。您必须在声明中添加它
use Illuminate\Support\Facades\Auth;
如果没有经过身份验证的用户Auth::user()
将returnnull
,因此Auth::user()->role
将引发Trying to get property of non-object
;尝试使用 Auth::check()
检查是否有经过身份验证的用户,然后您可以检查角色:
public function __construct()
{
if(auth()->check() && auth()->user()->role == "XXXX")
{
$candidate = count(Candidate::CountNewCandidate());
}
else
{
$candidate = count(Candidate::CountNewCandidateGroup());
}
$this->data = [ 'cCandidate' => $candidate ];
}
注意:我使用了辅助函数auth()
。
希望对您有所帮助。
我通过路由中的数据解决了将用户传递给事件的问题:
Route::group(['middleware' => ['xxxx']], function () {
event(new NameEvent($data));
Route::auth();
});
事件中 Auth::user() 为空的原因(特别是在排队时)是因为没有用户。身份验证数据通常存储在会话中,当您的 even 被触发时,没有会话变量,因此没有会话数据。
过去我在事件中传入用户,然后在事件处理程序中对用户进行身份验证我会调用:
\Auth::attempt(['email', $event->performedBy()->email]);
这是必要的,因为我的应用程序有许多与身份验证(而不是用户界面)紧密耦合的功能。理想情况下,我可以将用户作为依赖项传入。
当我在 CandidateEvent 中询问 if(Auth::user()->role == "xxxx") 时显示 "Trying to get property of non-object"
问题是组件 Auth::user() 在我的事件中不起作用。
在活动中使用 Auth 的正确方法是什么?
public function __construct()
{
if(Auth::user()->role == "XXXX")
{
$candidate = count(Candidate::CountNewCandidate());
}
else
{
$candidate = count(Candidate::CountNewCandidateGroup());
}
$this->data = [ 'cCandidate' => $candidate ];
}
您似乎没有为 Auth facade 导入命名空间。您必须在声明中添加它
use Illuminate\Support\Facades\Auth;
如果没有经过身份验证的用户Auth::user()
将returnnull
,因此Auth::user()->role
将引发Trying to get property of non-object
;尝试使用 Auth::check()
检查是否有经过身份验证的用户,然后您可以检查角色:
public function __construct()
{
if(auth()->check() && auth()->user()->role == "XXXX")
{
$candidate = count(Candidate::CountNewCandidate());
}
else
{
$candidate = count(Candidate::CountNewCandidateGroup());
}
$this->data = [ 'cCandidate' => $candidate ];
}
注意:我使用了辅助函数auth()
。
希望对您有所帮助。
我通过路由中的数据解决了将用户传递给事件的问题:
Route::group(['middleware' => ['xxxx']], function () {
event(new NameEvent($data));
Route::auth();
});
事件中 Auth::user() 为空的原因(特别是在排队时)是因为没有用户。身份验证数据通常存储在会话中,当您的 even 被触发时,没有会话变量,因此没有会话数据。
过去我在事件中传入用户,然后在事件处理程序中对用户进行身份验证我会调用:
\Auth::attempt(['email', $event->performedBy()->email]);
这是必要的,因为我的应用程序有许多与身份验证(而不是用户界面)紧密耦合的功能。理想情况下,我可以将用户作为依赖项传入。