Laravel: Auth :: user () -> id che lega per get una properties; di un non object

Sto ricevendo il seguente errore "cercando di get una properties; di un non object" quando invio un module per aggiungere un utente, l'errore è apparentemente sulla prima row: Auth :: user () -> id del seguente :

$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(arrays('email' => $input['email'], 'password' => $generatedPassword, 'user_group' => $usergroup)); $user->addGroup($group); 

Qualche idea? Ho cercato per un po 'e tutto ciò che vedo dice che dovrebbe funzionare bene. Il mio utente ha effettuato l'accesso utilizzando il pacchetto di authentication Sentry 2.

Se si sta utilizzando Sentry verificare l'utente che ha effettuato l'accesso con Sentry::getUser()->id . L'errore che ottieni è che Auth::user() restituisce NULL e prova a get id da NULL, quindi l'errore trying to get a property from a non-object .

Fai un Auth :: check () prima di essere sicuro di aver effettuato l'accesso:

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

Ciao

Ora con laravel 4.2 è facile get l'id dell'utente:

 $userId = Auth::id(); 

questo è tutto.

Ma per recuperare i dati dell'utente diversi da id, usi:

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

Per maggiori dettagli, controllare la parte di sicurezza della documentazione

l'id è protected , basta aggiungere un metodo pubblico nel tuo /models/User.php

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

così puoi chiamarlo

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

ricorda sempre di testare se l'utente è loggato …

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

Controlla il tuo route per la function in cui stai usando Auth::user() , Per get dati Auth :: user () la function dovrebbe essere nel middleware web Route::group(['middleware' => 'web'], function () {}); .

usa Illuminate \ Support \ Facades \ Auth;

In class:

 protected $user; 

Questo codice funziona per me

In costruzione:

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

eccetera..

La tua domanda e il codice di esempio sono un po 'vaghi, e credo che gli altri sviluppatori si concentrino sulla cosa sbagliata. Sto facendo un'applicazione in Laravel, ho usato tutorial online per creare un nuovo utente e un'authentication e ho notato che quando si crea un nuovo utente in Laravel, non viene creato alcun object Auth, che si usa per get il (nuovo) l'ID dell'utente registrato nel resto dell'applicazione. Questo è un problema, e credo in quello che potresti chiedere. Ho fatto questo tipo di hacking cludgy in 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(arrays('email' => Input::get('email'), 'password' => Input::get('password')), true); Redirect::to('users/' . Auth::user()->id); 

Non dovrei creare e autenticare, ma non sapevo cos'altro fare.