2017-12-29 14 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

라인은 무엇입니까? 개체 중 하나가 개체가 아닙니다. – Peon

+0

사용자 :: 어디서 ..... – Arturek

+1

'auth-> user()'는'null'을 반환 할 수 있습니다 ... ** 사용자가 ** 승인 된 사용자를 얻을 수있는 경우에도 업데이트를 호출 할 수 있습니다. – 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 미들웨어를 사용하는 것입니다. 이 미들웨어가 실행될 때 현재 인증 된 사용자가 있다는 것을 보장합니다.