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

Когда я спрашиваю, отображает ли (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 ];
}

1

Решение

Если нет аутентифицированного пользователя 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().

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

4

Другие решения

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

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

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

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

1

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

use Illuminate\Support\Facades\Auth;
0

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

  Route::group(['middleware' => ['xxxx']], function () {
event(new NameEvent($data));
Route::auth();
});
0
По вопросам рекламы [email protected]