2017-12-29 19 views
1

以下、私は自分のミドルウェアでユーザーのIPを更新しています。Laravel 5 - "非オブジェクトのプロパティを取得しようとしています"

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); 
    } 
} 

いくつかの通知はそれを修正する方法"Trying to get property of non-object"任意のアイデアを私にポップアップされますか?

+0

何行ですか?あなたのオブジェクトの1つはオブジェクトではありません。 – Peon

+0

User :: where ..... – Arturek

+1

'auth-> user()'は 'null'を返すことができます...もしあなたが**公認のユーザーを得ることができるならば、あなたはそれについてupdateを呼び出すことができます – lagbox

答えて

1

現在のユーザーが認証されていないが、あなたがオフuser()呼び出しからnullを取得する場合、これは

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

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

から

とトップuse Illuminate\Support\Facades\Auth;

+0

彼らはすでに上部にエイリアスがある – lagbox

+0

はい。それは将来の参考のためです。とにかくありがとう :) –

1

でこれをインポート置き換えAuthManager/Guard nullにあるプロパティにアクセスしようとすると、そのエラーが発生します。

このミドルウェアをそのまま使用する場合は、その前にauthミドルウェアが割り当てられていることを確認する必要があります。認証されたユーザーがいることを期待しているので、そうであることを確認する必要があります。

これを実行する最善の方法は、現在のユーザーが認証されて通過するかどうかを確認するauthミドルウェアを使用することです。これは、このミドルウェアが実行されたときに、現在認証されているユーザーがいることを保証します。

関連する問題