Авторизация в laravel

211
14 июля 2018, 13:20

Я создал все представления и маршруты с помощью команды php artisan make:auth Теперь хочу узнать id авторизованного пользователя при помощи Auth::user()->id. В другом проекте всё работает нормально. В нынешнем вылетает ошибка

При успешной авторизации меня редиректит на /home на данной странице всё хорошо и я вижу выводимый идентификатор, если я её обновляю, то меня выкидывает опять на страницу авторизации. Если перехожу на другую страницу, то выдаёт ошибку:

Undefined variable: user (View: C:\OpenServer\domains\laravel\resources\views\layouts\app.blade.php) (View: C:\OpenServer\domains\laravel\resources\views\layouts\app.blade.php)

сам код:

if (Auth::check()) {
    $user = Auth::user()->name;
    echo $user;
}

этот код я пишу прям во вьюшке. Знаю, что так не правильно, но я только учу laravel. Но мне интересно, почему тот же самый код в другом проекте работает, а тут нет

UPD. var_dump(Auth::user()); показывает следующее:

object(App\User)#221 (26) {
  ["fillable":protected]=>
  array(3) {
    [0]=>
    string(4) "name"
    [1]=>
    string(5) "email"
    [2]=>
    string(8) "password"
  }
  ["hidden":protected]=>
  array(2) {
    [0]=>
    string(8) "password"
    [1]=>
    string(14) "remember_token"
  }
  ["connection":protected]=>
  string(5) "mysql"
  ["table":protected]=>
  NULL
  ["primaryKey":protected]=>
  string(2) "id"
  ["keyType":protected]=>
  string(3) "int"
  ["incrementing"]=>
  bool(true)
  ["with":protected]=>
  array(0) {
  }
  ["withCount":protected]=>
  array(0) {
  }
  ["perPage":protected]=>
  int(15)
  ["exists"]=>
  bool(true)
  ["wasRecentlyCreated"]=>
  bool(false)
  ["attributes":protected]=>
  array(8) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(25) "Сергей Байков"
    ["email"]=>
    string(16) "admin@sbaikov.ru"
    ["password"]=>
    string(60) "$2y$10$CjckWp0Bz5Hl1FnY96QQmO181QZNgedHzN0upwBnvgz7NCZ5hoVl2"
    ["remember_token"]=>
    string(60) "6GSOvXz9Ml264tOljv6YR6w1VQV4DH3PsOikFTMa683lnHCas95Sah7bKib8"
    ["created_at"]=>
    string(19) "2018-02-20 09:28:31"
    ["updated_at"]=>
    string(19) "2018-02-20 09:28:31"
    ["status"]=>
    string(5) "admin"
  }
  ["original":protected]=>
  array(8) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(25) "Сергей Байков"
    ["email"]=>
    string(16) "admin@sbaikov.ru"
    ["password"]=>
    string(60) "$2y$10$CjckWp0Bz5Hl1FnY96QQmO181QZNgedHzN0upwBnvgz7NCZ5hoVl2"
    ["remember_token"]=>
    string(60) "6GSOvXz9Ml264tOljv6YR6w1VQV4DH3PsOikFTMa683lnHCas95Sah7bKib8"
    ["created_at"]=>
    string(19) "2018-02-20 09:28:31"
    ["updated_at"]=>
    string(19) "2018-02-20 09:28:31"
    ["status"]=>
    string(5) "admin"
  }
  ["casts":protected]=>
  array(0) {
  }
  ["dates":protected]=>
  array(0) {
  }
  ["dateFormat":protected]=>
  NULL
  ["appends":protected]=>
  array(0) {
  }
  ["events":protected]=>
  array(0) {
  }
  ["observables":protected]=>
  array(0) {
  }
  ["relations":protected]=>
  array(0) {
  }
  ["touches":protected]=>
  array(0) {
  }
  ["timestamps"]=>
  bool(true)
  ["visible":protected]=>
  array(0) {
  }
  ["guarded":protected]=>
  array(1) {
    [0]=>
    string(1) "*"
  }
  ["rememberTokenName":protected]=>
  string(14) "remember_token"
}

Вспомнил, что в таблицу users добавил поле 'status'. При добавлении новой записи это поле заполняется автоматически на уровне СУБД, в коде ничего не делал с этим полем.

Заметил ещё одно. Если в коде убираю все упоминанияAuth::check(), то всё хорошо и по всем вьюшкам переходит и нормально выполняются все функции, но стоит зайти потом на страницу /home, то выкидывает на страницу логина. На страницу /home могу попасть только один раз и то после авторизации.

Answer 1

Возможно причина в том что у вас в методе который отвечает за /home написан код:

Auth::logout();

И при входе на страницу авторизация пропадает.

Или как вариант проверьте в .env или в файле config/session.php параметры:

SESSION_DRIVER=
SESSION_LIFETIME=

Возможно указано что-то не верно в них.

Answer 2

Попробуй поставить обратный слэш перед фасадом:

if (\Auth::check()) {
    $user = \Auth::user()->name;
    echo $user;
}
READ ALSO
На сервере не отрабатывает curl к Telegram API

На сервере не отрабатывает curl к Telegram API

Есть скрипт на php (локально - работает нормально), но на сервере нетК сайту прикрутил (ssl-cloudflare)

212
Очень долгая загрузка данных

Очень долгая загрузка данных

У меня есть сайт на yii2Там есть дерево категорий, которое раскрывается

166
Как добавить в autoload-composer'a свои скрипты?

Как добавить в autoload-composer'a свои скрипты?

Начал осваивать composer, и сразу возник вопросДля подключения установленных библиотек, мы в начало скрипта добавляем файл composer'a autoload

201
SLIM проблема с кодировкой

SLIM проблема с кодировкой

API написанный с помощью SLIM раньше возвращал вопросы в Json вместо кириллицыПосле создания подключения, сразу первым запросом отправлял $stmt = $this->con->prepare("SET...

213