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.
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
.
Faites un Auth:: check () avant de vous assurer que vous êtes bien connecté:
if (Auth::check())
{
// The user is logged in...
}
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
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();
}
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 () {});
.
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..
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.
Si quelqu'un cherche laravel 5 >
Auth::id()
Donner l'id de l'utilisateur autorisé
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.