2016-11-12 3 views
0

사용자가 로그인되어 있는지 확인하고 관리자 인 지 확인하는 미들웨어의 사용자 이름을 확인하거나 특정 페이지에 대한 액세스를 제한해야합니다. 사용자 이름을 어떻게 얻습니까?Laravel Middleware의 사용자 이름 확인

Auth :: user()를 사용하면 다른 미들웨어에서 오류가 발생합니다.

ErrorException in VerifyCsrfToken.php line 136: 
Trying to get property of non-object 

경로

Route::get('admin', ['middleware' => 'admin', function() { 
    echo "You're an admin!"; 
}]); 

미들웨어

class VerifyAdmin 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 
      if (Auth::user()->username == "enayet123") 
       return $next($request); 
    } 
} 
+0

경로 파일을 표시 할 수 있습니까? –

+0

나는 왜 이것이 라우드 파일에 영향을 줄지 이해하지 못한다. –

+1

당신의 laravel 버전은 무엇입니까? –

답변

0

당신은 조건부 그래서 다음 미들웨어가 요청을 할 수 있습니다 실패하더라도

return $next($request); 

를 반환해야합니다. 조건부 외부로 이동하면 문제가 해결됩니다.

코드는 다음과 같아야합니다

class VerifyAdmin 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 
      if (Auth::user()->username == "enayet123") { 
       // Do the thing you want ... (return or redirect to somewhere else) 
       redirect()->route('homepage'); 
      } 
      return $next($request); 
    } 
} 

당신은 항상 return $next($request) 필요가있는 등 사용자 이름과 사용자 정보를 얻기 위해 특정 미들웨어

+0

미들웨어는 사용자 이름이 "enayet123"인 경우 요청을 다음 미들웨어로 전달하기위한 것이므로 이것이 그러한 이유입니다. 확인이 실패하면 사용자는 홈페이지 '/' –

+0

으로 리디렉션되어야합니다. @EnayetHussain - 위의 업데이트 된 코드를 확인하고 구현하려고하면 문제가 해결됩니다. –

0

에서 코드/요청을 통과해야/당신이

당신은 다음 사용자인지 확인한다 인증 : 사용자()가 아니라)$ 요청 -> 사용자 (사용할 필요가 이메일을 보내 사용자 모델 내에 메소드를 작성하고 미들웨어에서 호출하여 관리자입니다.

class VerifyAdmin 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 
     $user = $request->user(); 
     if ($user && $user->isAdmin()) { 
      return $next($request); 
     } 
     return redirect('/'); 
    } 
}