Когда я спрашиваю, отображает ли (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 ];
}
Если нет аутентифицированного пользователя 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()
.
Я надеюсь, что это поможет вам.
Причина, по которой Auth :: user () является нулем в событии (особенно если оно находится в очереди), заключается в том, что пользователя нет. Данные аутентификации, как правило, хранятся в сеансе, и когда вы даже запускаете их, переменная сеанса отсутствует, следовательно, нет данных сеанса.
В прошлом я передавал пользователя в событии, а затем для аутентификации пользователя в обработчике события я бы вызвал:
\Auth::attempt(['email', $event->performedBy()->email]);
Это было необходимо, потому что в моем приложении было много функций, тесно связанных с аутентификацией (вместо UserInterface). В идеале я мог бы просто передать пользователю в качестве зависимости.
Похоже, вы не импортировали пространство имен для фасада Auth. Вы должны добавить это в объявлениях
use Illuminate\Support\Facades\Auth;
Я решил это, передав пользователя на событие, через данные в маршрутах:
Route::group(['middleware' => ['xxxx']], function () {
event(new NameEvent($data));
Route::auth();
});