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

Я получаю следующую ошибку: «пытаюсь получить свойство не-объекта», когда я отправляю форму для добавления пользователя, ошибка, по-видимому, находится в первой строке: 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.

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

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

 if (Auth::check()) { // The user is logged in... } 

до свидания

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

 $userId = Auth::id(); 

вот и все.

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

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

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

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

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

так что вы можете назвать это

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

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

 if (Auth::check()) { $id = Auth::user()->getId(); } 

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

используйте Illuminate \ Support \ Facades \ Auth;

В классе:

 protected $user; 

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

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

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

и т.д..

Ваш вопрос и образец кода немного расплывчаты, и я считаю, что другие разработчики сосредотачиваются на неправильном. Я делаю приложение в 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); 

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