2017-12-29 7 views
1

Unten habe ich meine Middleware, die IP des Benutzers aktualisiert.Laravel 5 - "Versuch, Eigentum von Nicht-Objekt zu bekommen"

namespace App\Http\Middleware; 

use Closure; 
use App\User; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Contracts\Auth\Guard; 

class UserMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function __construct(Guard $auth) 
    { 
     $this->auth = $auth; 
    } 
    public function handle($request, Closure $next) 
    { 
     User::where('id', $this->auth->user()->id)->update(['last_visit_ip' => '231']); 
     return $next($request); 
    } 
} 

Einige Benachrichtigung mich Jede Idee "Trying to get property of non-object" Aufspringen wie man es beheben?

+0

Welche Linie? Eines Ihrer Objekte ist kein Objekt. – Peon

+0

Benutzer :: wo ..... – Arturek

+1

'auth-> user()' kann 'null' zurückgeben ... auch wenn Sie ** den authentifizierten Benutzer bekommen können, können Sie einfach update darauf – lagbox

Antwort

1

Ersetzen Sie diese

User::where('id', $this->auth->user()->id)->update(['last_visit_ip' => '231']); 

dieser

User::where('id', Auth::id())->update(['last_visit_ip' => '231']); 

und diese auf use Illuminate\Support\Facades\Auth;

+0

sie bereits aufrufen habe den Alias ​​an der Spitze – lagbox

+0

ja. Es ist für zukünftige Referenz. Danke trotzdem :) –

1

oben importieren Wenn aktuelle Benutzer nicht authentifiziert ist Sie eine null vom user() Anruf erhalten wird ausgeschaltet die AuthManager/Guard. Wenn Sie versuchen, auf eine Eigenschaft unter null zuzugreifen, erhalten Sie diesen Fehler.

Wenn Sie diese Middleware verwenden möchten, müssen Sie sicherstellen, dass Sie die auth Middleware zuvor zugewiesen haben. Sie erwarten, dass ein authentifizierter Benutzer vorhanden ist. Sie müssen also sicherstellen, dass dies der Fall ist.

Der beste Weg, dies zu tun, ist die Verwendung der auth Middleware, die überprüft, ob der aktuelle Benutzer authentifiziert ist und lassen Sie sie passieren. Das garantiert, dass wenn diese Middleware ausgeführt wird, Sie absolut einen authentifizierten Benutzer haben.

Verwandte Themen