Ich erhalte den folgenden Fehler "Beim Versuch, eine Eigenschaft eines Nicht-Objekts abzurufen", wenn ich ein Formular zum Hinzufügen eines Benutzers übermittle. Der Fehler befindet sich anscheinend in der ersten Zeile: Auth :: user () -> id der folgenden :
$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);
Irgendwelche Ideen? Ich habe eine Weile gesucht und alles was ich sehe besagt, dass dies gut funktionieren sollte. Mein Benutzer ist mit dem Sentry 2-Authentifizierungspaket angemeldet.
Wenn Sie Sentry
verwenden, überprüfen Sie den angemeldeten Benutzer mit Sentry::getUser()->id
. Der Fehler, den Sie erhalten, ist, dass Auth::user()
NULL zurückgibt und versucht, eine ID von NULL zu erhalten, daher der Fehler trying to get a property from a non-object
.
Machen Sie vorher ein Auth :: check (), um sicherzustellen, dass Sie gut eingeloggt sind:
if (Auth::check())
{
// The user is logged in...
}
Mit laravel 4.2 ist es jetzt leicht, die Benutzer-ID zu erhalten:
$userId = Auth::id();
das ist alles.
Um andere Benutzerdaten als id abzurufen, verwenden Sie:
$email = Auth::user()->email;
Weitere Informationen finden Sie unter Sicherheitsteil der Dokumentation
id ist protected
, fügen Sie einfach eine öffentliche Methode in Ihren /models/User.php
ein.
public function getId()
{
return $this->id;
}
so kannst du es nennen
$id = Auth::user()->getId();
denken Sie immer daran zu testen, ob der Benutzer angemeldet ist ...
if (Auth::check())
{
$id = Auth::user()->getId();
}
In Laravel 5.6 verwende ich
use Auth;
$user_id = Auth::user()->id;
wie der andere Vorschlag
Auth::id()
scheint auf ältere Versionen von Laravel 5.x zuzutreffen und funktionierte nicht für mich.
Überprüfen Sie Ihre route
für die Funktion, in der Sie Auth::user()
verwenden. Um Auth :: user () -Daten zu erhalten, sollte die Funktion in web
Middleware Route::group(['middleware' => 'web'], function () {});
enthalten sein.
verwenden Sie Illuminate\Support\Facades\Auth;
Im Unterricht:
protected $user;
Dieser Code funktioniert für mich
Im Konstrukt:
$this->user = User::find(Auth::user()->id);
In function:
$this->user->id;
$this->user->email;
usw..
Ihre Frage und Ihr Codebeispiel sind etwas vage, und ich glaube, die anderen Entwickler konzentrieren sich auf das Falsche. Ich mache eine Anwendung in Laravel, habe Online-Lernprogramme zum Erstellen eines neuen Benutzers und zur Authentifizierung verwendet und habe bemerkt, dass beim Erstellen eines neuen Benutzers in Laravel kein Auth-Objekt erstellt wird. ID des angemeldeten Benutzers im Rest der Anwendung. Dies ist ein Problem, und ich glaube, was Sie fragen. Ich habe diese Art von verrücktem Hack in userController :: store gemacht:
$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);
Sollte nicht erstellt und authentifiziert werden müssen, aber ich wusste nicht, was ich sonst tun sollte.
Wenn jemand nach Laravel sucht 5>
Auth::id()
iD des berechtigten Benutzers angeben
Vergessen Sie nie, Folgendes hinzuzufügen:
use Illuminate\Http\Request;
Dann finden Sie die ID mithilfe der Anforderungsmethode:
$id= $request->user()->id;
Der erste Benutzer der Prüfung hat sich angemeldet und dann
if (Auth::check()){
//get id of logged in user
{{ Auth::getUser()->id}}
//get the name of logged in user
{{ Auth::getUser()->name }}
}
sie müssen überprüfen, ob der Benutzer angemeldet ist.
Auth::check() ? Auth::user()->id : null