web-dev-qa-db-fra.com

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

Je reçois le message d'erreur suivant: "tentative d'obtention d'une propriété d'un non-objet" lorsque je soumets un formulaire pour ajouter un utilisateur, l'erreur est apparemment sur la première ligne: Auth :: user () -> id du suivant :

$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 bien fonctionner. Mon utilisateur est connecté à l'aide du groupe d'authentification Sentry 2.

49
Josh

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

43
Altrim

Faites une vérification :: check () avant de vous assurer que vous êtes bien connecté:

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

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 la partie sécurité de la documentation

39
Dr. MAF

id est protected, ajoutez simplement une méthode publique dans votre /models/User.php

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

alors tu peux l'appeler

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

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

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

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.

4
frankfurt-laravel

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
Ashwani Panwar

utilisez Illuminate\Support\Facades\Auth;

En classe:

protected $user;

Ce code ça marche pour moi

En construction:

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

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

etc.. 

3
l3okor

Votre question et votre exemple de code sont un peu vagues, et je pense que les autres développeurs se concentrent sur la mauvaise chose. Je suis en train de faire une application à Laravel, ai utilisé des tutoriels en ligne pour créer un nouvel utilisateur et une authentification, et semble 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 bidouillage dans 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);

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

1
Andrew Koper

Si quelqu'un cherche laravel 5>

 Auth::id() 

donne l'identifiant de l'utilisateur autorisé

1
Md Sifatul Islam

N'oubliez jamais d'inclure:

use Illuminate\Http\Request;   

Puis trouvez l'ID en utilisant la méthode de la requête:

$id= $request->user()->id;
0
rashedcs

Le premier utilisateur de contrôle connecté, puis

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

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

vous devez vérifier si l'utilisateur est connecté?

Auth::check() ? Auth::user()->id : null
0
Vahid Alvandi