gubin_niko
@gubin_niko

Как сделать проверку авторизации при обновлении странички на Laravel?

Добрый вечер! Мои изучения Laravel продолжаются.

Разобрался я с самим процессом авторизации в системе, разобрал модель базовую, от которой модель пользователей наследуется, изучил, что лежит в трейтах, валидацию и всё в таком духе. Был вдохновлён, пока не столкнулся вот с чем.

Необходимо на каждом обновлении странички проверять пользователя, не кинули ли ему бан, не разжаловали ли у него админские права, а так же ставить метку последнего посещения.

Я сделал это просто, как мне показалось. Создал посредника и повесил его на всю группу роутеров, внутри сотворил сие:
public function handle($request, Closure $next, $guard = null)
  {
    if (Auth::check()) {
      $model = new UserModel();
      $userID = Auth::id();

      // Проверяем наличие бана у пользователя
      if (($userBlock = $model->checkBlock($userID)) !== true) {
        // Завершаем сессиию
        Auth::logout();

        // и перенаправляем на форму авторизации с сообщением
        return redirect()->to(route('auth::form'))->with([
          'result_message' => trans('auth.blocked'),
          'result_data' => $userBlock
        ]);
      }

      // Обновляем метку visited_at
      $model->updateVisitedAt($userID);
    }

    return $next($request);
  }


Работает, всё проверяет и метку времени в базе обновляет (простым запросом сам делаю, ибо updated_at и created_at из другой оперы - не подходят). А теперь понимаю, что не могу получить экземпляр пользователя через свою же модель, которая наследуется от Illuminate\Database\Eloquent\Model и использует трейт Illuminate\Auth\Authenticatable.

При запросе из посредника метода updateVisitedAt пытаюсь внутри этого метода вывести $this->getAttributes(), но там пусто... Как же так? А не должны ли туда пролиться данные, раз в Auth:user() данные у меня есть? Просветите, буду благодарен...

P.S. Провайдер использовал и database, и eloquent. Чувствую, что что-то не прицепил к модели или к посреднику, но чего именно - не понимаю...

Offtop: Выражаю благодарность каждому пользователю этого сервиса :-) На днях просил помощи на форуме, так вспомнил былое высокомерие "великих программистов", и ответов к тому же не получил. Эта площадка всегда помогала мне узнать что-то новое :-)
  • Вопрос задан
  • 2435 просмотров
Решения вопроса 1
@aresouji
Пересмотрите свое решение полностью, легче отредактировать модель User и потом пользоваться примерно такой схемой

public function handle($request, Closure $next, $guard = null)
{
	if (Auth::check()) {
		$user = Auth::user();

		if ($user->isBanned()) {
			// User is banned
		}

		// User is not banned
	}
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Denormalization
@Denormalization
Почему просто не брать Auth::user() и смотреть уже на конкретном юзере?
Зачем эти закидоны с new UserModel();?

updateVisitedAt - вызывается на пустой модели, в которой ничего нету, так как она создана через new UserModel;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы