3

When I ask if(Auth::user()->role == "xxxx") inside CandidateEvent displays "Trying to get property of non-object"

The problem is that component Auth::user() isn't working in my Event.

What is the correct way to use Auth within Events?

public function __construct()
{
    if(Auth::user()->role == "XXXX")
    {
        $candidate = count(Candidate::CountNewCandidate());
    }
    else
    {
        $candidate = count(Candidate::CountNewCandidateGroup());
    }
    $this->data = [ 'cCandidate' => $candidate ];        
}
4

4 回答 4

5

如果没有经过身份验证的用户Auth::user()会返回null,所以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()

我希望这能帮到您。

于 2016-08-03T00:36:16.260 回答
2

Auth::user() 在事件中为 null 的原因(尤其是在排队时)是因为没有用户。身份验证数据通常存储在会话中,当您的事件被触发时,没有会话变量,因此没有会​​话数据。

过去我在事件中传递了用户,然后在事件处理程序中对用户进行身份验证,我会调用:

\Auth::attempt(['email', $event->performedBy()->email]);

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

于 2018-01-24T15:14:45.140 回答
0

看起来您没有为 Auth 门面导入命名空间。您必须在声明中添加它

use Illuminate\Support\Facades\Auth;
于 2016-08-03T00:31:24.760 回答
0

我通过路由中的数据解决了将用户传递给事件的问题:

  Route::group(['middleware' => ['xxxx']], function () {
    event(new NameEvent($data));
    Route::auth();
});
于 2016-08-03T01:09:26.983 回答