Laravel: Auth :: user () -> id пытается получить свойство не-объекта

47

Я получаю следующую ошибку: "пытаюсь получить свойство не-объекта", когда я отправляю форму для добавления пользователя, ошибка, по-видимому, находится в первой строке: Auth:: user() → id из следующего:

$id = Auth::user()->id;
$currentuser = User::find($id);
$usergroup = $currentuser->user_group;
$group = Sentry::getGroupProvider()->findById($usergroup);

$generatedPassword = $this->_generatePassword(8,8);
$user = Sentry::register(array('email' => $input['email'], 'password' => $generatedPassword, 'user_group' => $usergroup));

$user->addGroup($group);

Любые идеи? Я искал какое-то время, и все, что я вижу, говорит, что это должно работать нормально. Мой пользователь вошел в систему, используя пакет аутентификации Sentry 2.

  • 0
    Есть ли в вашей таблице пользователей столбец с именем id? Если нет, то это проблема.
  • 0
    Да, идентификатор есть @OffTheFitz таблица называется пользователи
Показать ещё 5 комментариев
Теги:
authentication
laravel-4

11 ответов

41
Лучший ответ

Если вы используете Sentry, проверьте зарегистрированного пользователя с помощью Sentry::getUser()->id. Ошибка, которую вы получаете, заключается в том, что Auth::user() возвращает NULL и пытается получить идентификатор от NULL, следовательно, ошибка trying to get a property from a non-object.

  • 1
    Я предпочитаю использовать цепочку методов {{auth () -> user () -> name}}
39

Выполните Auth :: check(), чтобы убедиться, что вы хорошо вошли в систему:

if (Auth::check())
{
    // The user is logged in...
}
  • 3
    Это правильно - сначала вы должны выполнить Auth :: check (), если пользователь входит в систему. Тогда у Auth :: getUser () будет полезный объект :)
  • 1
    Если вы хотите сделать это с помощью @if(Auth::check()) {{Auth::user()->id}} @endif лезвия: @if(Auth::check()) {{Auth::user()->id}} @endif (это полезно, если вы хотите получить идентификатор пользователя для javascript / Ajax)
37

Теперь с laravel 4.2 легко получить идентификатор пользователя:

$userId = Auth::id();

это все.

Но для получения пользовательских данных, отличных от id, вы используете:

$email = Auth::user()->email;

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

16

id protected, просто добавьте общедоступный метод в /models/User.php

public function getId()
{
  return $this->id;
}

чтобы вы могли его назвать

$id = Auth::user()->getId();

помнить всегда, чтобы проверить, зарегистрирован ли пользователь...

if (Auth::check())
{
     $id = Auth::user()->getId();
}
  • 4
    Или используйте Auth :: id ()
  • 2
    в моем случае работал только этот ответ. Auth: id () вернул ноль.
4

В Laravel 5.6 я использую

use Auth;
$user_id = Auth::user()->id;

как другое предложение

Auth::id()

кажется, относится к более старым версиям Laravel 5.x и не работает для меня.

  • 0
    Auth::id() отлично работает в версии laravel 5.7.
4

Проверьте route для функции, в которой вы используете Auth::user(). Для получения данных Auth:: user() функция должна находиться внутри web middleware Route::group(['middleware' => 'web'], function () {});.

3

использовать Illuminate\Support\Facades\Auth;

В классе:

protected $user;

Этот код работает для меня

В конструкции:

$this->user = User::find(Auth::user()->id);

In function:
$this->user->id;
$this->user->email;

и т.д.

1

Если кто-то ищет Laravel 5>

 Auth::id() 

дать идентификатор авторизованного пользователя

1

Ваш вопрос и образец кода немного расплывчаты, и я считаю, что другие разработчики сосредотачиваются на неправильном. Я делаю приложение в Laravel, использовал онлайн-учебники для создания нового пользователя и аутентификации и, похоже, заметил, что при создании нового пользователя в Laravel не создается объект Auth, который вы используете для получения (нового) зарегистрированный идентификатор пользователя в остальной части приложения. Это проблема, и я верю, что вы можете просить. Я сделал этот cludgy взломать в userController:: store:

$user->save();

Session::flash('message','Successfully created user!');

//KLUDGE!! rest of site depends on user id in auth object - need to force/create it here
Auth::attempt(array('email' => Input::get('email'), 'password' => Input::get('password')), true);

Redirect::to('users/' . Auth::user()->id);

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

0

Первый пользователь вошел в систему, а затем

if (Auth::check()){
    //get id of logged in user
    {{ Auth::getUser()->id}}

    //get the name of logged in user
    {{ Auth::getUser()->name }}
}
0

Вы должны проверить, зарегистрирован ли пользователь?

Auth::check() ? Auth::user()->id : null

Ещё вопросы

Сообщество Overcoder
Наверх
Меню