Laravel: Auth:: user () - > id essayant d'obtenir une propriété d'un non-objet

Je reçois l'erreur suivante: "essayer d'obtenir une propriété d'un non-objet" quand je soumettre un formulaire pour ajouter un utilisateur, l'erreur est apparemment sur la première ligne: Auth::user()->id de l'suivante:

$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);

Des idées? J'ai cherché pendant un moment et tout ce que je vois dit que cela devrait fonctionner correctement. Mon utilisateur est connecté en utilisant le bundle d'authentification Sentry 2.

47
demandé sur Cœur 2013-07-24 17:46:17

9 réponses

Si vous utilisez Sentry vérifier l'utilisateur connecté avec Sentry::getUser()->id. L'erreur que vous obtenez est que le Auth::user() renvoie NULL et il essaie d'obtenir l'id de NULL d'où l'erreur trying to get a property from a non-object.

42
répondu Altrim 2013-07-24 14:08:18

Faites un Auth:: check () avant de vous assurer que vous êtes bien connecté:

if (Auth::check())
{
    // The user is logged in...
}
39
répondu jody_lognoul 2018-07-10 09:48:51

Maintenant avec laravel 4.2, il est facile d'obtenir l'id de l'utilisateur:

$userId = Auth::id();

C'est tout.

Mais pour récupérer les données de l'utilisateur autres que l'id, vous utilisez:

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

Pour plus de détails, consultez sécurité partie de la documentation

33
répondu Dr. MAF 2018-08-02 07:57:59

Id est protected, il suffit d'ajouter une méthode publique dans votre /models/User.php

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

Donc vous pouvez l'appeler

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

Rappelez-vous toujours de tester si l'utilisateur est connecté...

if (Auth::check())
{
     $id = Auth::user()->getId();
}
14
répondu maztch 2014-04-22 10:15:00

Vérifiez votre route pour la fonction dans laquelle vous utilisez Auth::user(), pour obtenir les données Auth::user() la fonction doit être dans web middleware Route::group(['middleware' => 'web'], function () {});.

4
répondu Ashwani Panwar 2016-05-05 11:35:15

Utiliser Éclairer\Support\Façades\Auth;

Dans la classe:

protected $user;

Ce code fonctionne pour moi

Dans la construction:

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

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

Etc..

3
répondu l3okor 2017-03-31 10:09:45

Votre question et votre exemple de code sont un peu vagues, et je crois que les autres développeurs se concentrent sur la mauvaise chose. Je fais une application dans Laravel, j'ai utilisé des tutoriels en ligne pour créer un nouvel utilisateur et l'authentification, et j'ai semblé avoir remarqué que lorsque vous créez un nouvel utilisateur dans Laravel, aucun objet Auth n'est créé - que vous utilisez pour obtenir le (nouveau) identifiant de l'utilisateur connecté dans le reste de l'application. C'est un problème, et je crois ce que vous demandez peut-être. J'ai fait ce genre de cludgy pirater dans userController:: magasin:

$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);

Ne devrait pas avoir à créer et authentifier, mais je ne savais pas quoi faire d'autre.

1
répondu Andrew Koper 2017-12-20 15:52:16

Si quelqu'un cherche laravel 5 >

 Auth::id() 

Donner l'id de l'utilisateur autorisé

1
répondu Md Sifatul Islam 2018-08-01 01:44:43

Dans Laravel 5.6 j'utilise

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

Comme l'autre suggestion

Auth::id()

Semble s'appliquer aux anciennes versions de Laravel 5.x et n'a pas fonctionné pour moi.

1
répondu frankfurt-laravel 2018-08-06 20:11:28