Laravel-Event:如何在事件中使用Auth :: user()?

时间:2016-08-02 23:53:40

标签: php laravel laravel-events

当我询问CandidateEvent中是否(Auth :: user() - > role ==" xxxx")时显示"尝试获取非对象的属性"

问题是组件Auth :: user()在我的活动中没有工作。

在事件中使用Auth的正确方法是什么?

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

4 个答案:

答案 0 :(得分:4)

如果没有经过身份验证的用户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()

我希望这会对你有所帮助。

答案 1 :(得分:1)

Auth :: user()在事件中为空(特别是如果它排队)的原因是因为没有用户。验证数据通常存储在会话中,当触发偶数时,没有会话变量,因此没有会​​话数据。

过去我在事件中传递了用户,然后在我调用的事件处理程序中验证用户:

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

这是必要的,因为我的应用程序有很多功能与Authentication(而不是UserInterface)紧密结合。理想情况下,我可以将用户作为依赖项传递给他人。

答案 2 :(得分:0)

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

use Illuminate\Support\Facades\Auth;

答案 3 :(得分:0)

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

  Route::group(['middleware' => ['xxxx']], function () {
    event(new NameEvent($data));
    Route::auth();
});