Otrzymuję następujący błąd „próbuję uzyskać właściwość obiektu niebędącego obiektem”, kiedy przesyłam formularz w celu dodania użytkownika, błąd znajduje się najwyraźniej w pierwszej linii: Auth :: user () -> id następującego :
$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);
Jakieś pomysły? Szukałem przez chwilę i wszystko, co widzę, mówi, że powinno działać dobrze. Mój użytkownik jest zalogowany przy użyciu pakietu uwierzytelniania Sentry 2.
Auth::user();
? Auth :: user () zwraca aktualnie zalogowanego użytkownika, więc próbujesz zarejestrować użytkownika, który powinien być zalogowany, to nie ma sensuSentry::getUser()->id
. Otrzymany błąd polega na tym, żeAuth::user()
zwraca NULL i próbuje uzyskać identyfikator z NULL, stąd błądtrying to get a property from a non-object
.Odpowiedzi:
Jeśli używasz,
Sentry
sprawdź zalogowanego użytkownika zSentry::getUser()->id
. Otrzymany błąd polega na tym, żeAuth::user()
zwraca NULL i próbuje uzyskać identyfikator z NULL, stąd błądtrying to get a property from a non-object
.źródło
Teraz dzięki laravel 4.2 łatwo jest uzyskać identyfikator użytkownika:
to wszystko.
Ale aby odzyskać dane użytkownika inne niż id, używasz:
Aby uzyskać więcej informacji, zapoznaj się z częścią dokumentacji dotyczącą bezpieczeństwa
źródło
Wykonaj Auth :: check () przed, aby upewnić się, że jesteś dobrze zalogowany:
if (Auth::check()) { // The user is logged in... }
źródło
@if(Auth::check()) {{Auth::user()->id}} @endif
(jest to przydatne, jeśli chcesz uzyskać identyfikator użytkownika dla javascript / ajax)id jest
protected
, po prostu dodaj metodę publiczną do swojego/models/User.php
public function getId() { return $this->id; }
więc możesz to nazwać
pamiętaj, aby zawsze sprawdzić, czy użytkownik jest zalogowany ...
if (Auth::check()) { $id = Auth::user()->getId(); }
źródło
W Laravel 5.6 używam
use Auth; $user_id = Auth::user()->id;
jak inna sugestia
wydaje się, że dotyczy starszych wersji Laravel 5.x i nie działa dla mnie.
źródło
Auth::id()
działa dobrze w wersji laravel 5.7.Sprawdź swoją
route
funkcję, w której używasz.Auth::user()
Aby uzyskać dane Auth :: user (), funkcja powinna znajdować się wweb
oprogramowaniu pośrednimRoute::group(['middleware' => 'web'], function () {});
.źródło
Nigdy nie zapomnij dołączyć i spróbować użyć uwierzytelniania oprogramowania pośredniego:
use Illuminate\Http\Request;
Następnie znajdź identyfikator za pomocą metody żądania:
źródło
użyj Illuminate \ Support \ Facades \ Auth;
W klasie:
protected $user;
Ten kod działa dla mnie
W konstrukcji:
$this->user = User::find(Auth::user()->id); In function: $this->user->id; $this->user->email;
itp..
źródło
Jeśli ktoś szuka laravel 5>
podaj identyfikator autoryzowanego użytkownika
źródło
Możesz uzyskać dostęp do uwierzytelnionego użytkownika za pośrednictwem fasady autoryzacji:
use Illuminate\Support\Facades\Auth; // Get the currently authenticated user... $user = Auth::user(); // Get the currently authenticated user's ID... $id = Auth::id();
źródło
musisz sprawdzić, czy jest zalogowany użytkownik?
Auth::check() ? Auth::user()->id : null
źródło
Twoje pytanie i próbka kodu są trochę niejasne i uważam, że inni programiści koncentrują się na niewłaściwej rzeczy. Tworzę aplikację w Laravel, korzystałem z samouczków online do tworzenia nowego użytkownika i uwierzytelniania i wydawało się, że zauważyłem, że podczas tworzenia nowego użytkownika w Laravel nie jest tworzony żaden obiekt Auth - którego używasz do uzyskania (nowego) identyfikator zalogowanego użytkownika w pozostałej części aplikacji. To jest problem i wierzę, o co możesz pytać. Zrobiłem taki niezgrabny hack w 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);
Nie powinno być tworzenia i uwierzytelniania, ale nie wiedziałem, co jeszcze zrobić.
źródło
Pierwszy sprawdzający użytkownik zalogował się, a następnie
if (Auth::check()){ //get id of logged in user {{ Auth::getUser()->id}} //get the name of logged in user {{ Auth::getUser()->name }} }
źródło
W przypadku Laravel 6.X możesz wykonać następujące czynności:
źródło
W Laravel 8.6 następujące elementy działają u mnie w kontrolerze:
źródło
Możesz spróbować :
źródło
if(Auth::check() && Auth::user()->role->id == 2){ $tags = Tag::latest()->get(); return view('admin.tag.index',compact('tags')); }
źródło
Działa ze mną:
echo Auth::guard('guard_name')->user()->id;
źródło