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.
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
.
Faites une vérification :: 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'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
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();
}
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.
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 () {});
.
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..
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.
Si quelqu'un cherche laravel 5>
Auth::id()
donne l'identifiant de l'utilisateur autorisé
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;
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 }}
}
vous devez vérifier si l'utilisateur est connecté?
Auth::check() ? Auth::user()->id : null