118 votes

Laravel : Auth::user()->id tente de récupérer une propriété d'un non-objet

J'obtiens l'erreur suivante "trying to get a property of a non-object" lorsque je soumets un formulaire pour ajouter un utilisateur, l'erreur est apparemment sur la première ligne : Auth::user()->id de ce qui suit :

$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 certain temps et tout ce que je vois dit que cela devrait fonctionner correctement. Mon utilisateur est connecté à l'aide du pack d'authentification Sentry 2.

97voto

Dr. MAF Points 864

Maintenant avec laravel 4.2 il est facile d'obtenir l'identifiant 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 partie sécurité de la documentation

72voto

Altrim Points 1664

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 tente de récupérer l'id à partir de NULL, d'où l'erreur trying to get a property from a non-object .

51voto

jody_lognoul Points 797

Faites un Auth::check() avant pour être sûr que vous êtes bien connecté :

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

24voto

maztch Points 236

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

n'oubliez pas de toujours tester si l'utilisateur est connecté...

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

14voto

frankfurt-laravel Points 675

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X