Laravel-Event: как использовать Auth::user() в событии?

Когда я спрашиваю, если (Auth::user()->role == "xxxx") внутри CandidateEvent отображается "Попытка получить свойство не-объекта"

Проблема в том, что компонент Auth::user() не работает в моем событии.

Как правильно использовать аутентификацию в событиях?

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

person Steven Sánchez    schedule 02.08.2016    source источник
comment
Изображение кода не является хорошей идеей. Пожалуйста, подумайте о переформатировании вашего вопроса.   -  person Dan Walmsley    schedule 03.08.2016
comment
Извините, я новенький. И сейчас? (это код события)   -  person Steven Sánchez    schedule 03.08.2016
comment
Передайте пользователя к событию в data.   -  person ceejayoz    schedule 03.08.2016
comment
Работает, спасибо за помощь   -  person Steven Sánchez    schedule 03.08.2016


Ответы (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().

Я надеюсь, что это поможет вам.

person Ismail RBOUH    schedule 03.08.2016
comment
Проблема в том, что компонент Auth::user() не работает в моем событии, а я уже использую Illuminate\Support\Facades\Auth; - person Steven Sánchez; 03.08.2016
comment
Попробуйте использовать помощника auth() , auth()->user() ? - person Ismail RBOUH; 03.08.2016

Причина, по которой Auth::user() имеет значение null в событии (особенно если оно поставлено в очередь), заключается в том, что нет пользователя. Данные аутентификации обычно хранятся в сеансе, и когда ваш даже запускается, переменная сеанса отсутствует, поэтому нет данных сеанса.

В прошлом я передал пользователя в событии, а затем для аутентификации пользователя в обработчике событий я бы назвал:

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

Это было необходимо, потому что в моем приложении было много функций, тесно связанных с аутентификацией (вместо пользовательского интерфейса). В идеале я мог бы просто передать пользователя как зависимость.

person ajon    schedule 24.01.2018

Похоже, вы не импортировали пространство имен для фасада Auth. Вы должны добавить его в декларации

use Illuminate\Support\Facades\Auth;
person Jesús Amieiro    schedule 03.08.2016

Я решил передать пользователя в событие через данные в маршрутах:

  Route::group(['middleware' => ['xxxx']], function () {
    event(new NameEvent($data));
    Route::auth();
});
person Steven Sánchez    schedule 03.08.2016