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]);

这是必要的,因为我的应用程序有许多与身份验证(而不是用户界面)紧密耦合的功能。理想情况下,我可以将用户作为依赖项传入。