2016-06-21 2 views
3

내 사이트 내의 역할 및 권한을 제어하기 위해 spatie 권한 모듈을 사용하고 있습니다. Authenticate middleware에 조금 추가했습니다. 내 핸들은 이제 다음과 같습니다Laravel이 사용자 정의 오류 페이지를 표시하는 대신 HttpException 객체를 반환합니다.

우리는 로그인 페이지로 보낼에서 사용자가 그렇지 않으면 우리는이 ACP에 액세스 할 수있는 권한이 있는지 확인하고, 기록되지 않습니다 그래서 경우
public function handle($request, Closure $next, $guard = null) 
{ 
    if (Auth::guard($guard)->guest()) 
    { 
     if ($request->ajax() || $request->wantsJson()) 
      return response('Unauthorized.', 401); 

     return redirect()->guest('login'); 
    } 

    if (! Auth::user()->can('access acp')) 
    { 
     if ($request->ajax() || $request->wantsJson()) 
      return response('Unauthorised.', 403); 

     abort(403, "You do not have permission to access the Admin Control Panel. If you believe this is an error please contact the admin who set your account up for you."); 
    } 

    return $next($request); 
} 

그들에게 (403)를 표시하지 않은 경우 오류. 403.blade.php를 views/errors 폴더에 추가했습니다. 그러나 그 코드를 실행할 때 나는 단지 웁스를 얻는다! 개발자 도구는 500 개의 ISE가 반환되는 것을 보여줍니다. 왜 내 사용자 정의 오류 페이지가 표시되지 않는지 이해할 수 없습니다.

지금까지 환경을 프로덕션으로 전환하고 디버그 모드를 해제하려고 시도했지만 페이지가 표시되지 않습니다. 나는 또한 인증 예외를 던지려고했지만 다른 아무것도하지 않습니다. 나는 또한 App::abort()을 사용해 보았지만, 나는 여전히 500 개의 ISE를 가지고있다.

Google 검색 문제를 시도했지만 문제가있는 사람을 찾을 수 없습니다. 이 작업을 수행하는 데 도움이 될만한 정보를 보내 주시면 감사하겠습니다.

으악 내가 thusly 히

try 
{ 
    abort(403, "You do not have permission to access the Admin Control Panel. If you believe this is an error please contact the admin who set your account up for you."); 
} catch (HttpException $e) 
{ 
    dd($e); 
} 

다음 코드를 수정하면 내 오류 코드 및 메시지와 함께 HttpException의 인스턴스를 얻을

Error output

를 반환, 왜 그 다음 표시되지 맞춤 오류 페이지?

+0

어떤 예외 메시지는 당신이보고있는 문서에 따라해야 할 일을하나요 500? – Max

+0

"관리자 제어판에 액세스 할 수있는 권한이 없습니다. 중단 메시지가 표시됩니다. 이것이 오류라고 생각되면 계정을 설정 한 관리자에게 문의하십시오. ' – Styphon

+0

PHP 오류 로그를 확인 했습니까? 500은 우리가 더 높은 수준의 오류를 말하고 있음을 나타냅니다. – Dencker

답변

2

나는 아래의 코드로이 문제를 해결하기 위해 관리했습니다

routes.php (그것이 루멘의 응용 프로그램입니다 점에 유의하지만 Laravel와 함께 작동합니다)

$app->get('/test', function() use ($app) { 
    abort(403, 'some string from abort'); 
}); 

자원/뷰/오류/403.blade.php

<html> 
    <body> 
    {{$msg}} 
    <br> 
    {{$code}} 
    </body> 
</html> 

응용 프로그램/예외/Handler.php는, 렌더링() 함수를 수정 같은

public function render($request, Exception $e) 
{ 
    if ($e instanceof HttpException) { 
     $statusCode = $e->getStatusCode(); 

     if (view()->exists('errors.'.$statusCode)) { 
      return response(view('errors.'.$statusCode, [ 
       'msg' => $e->getMessage(), 
       'code' => $statusCode 
      ]), $statusCode); 
     } 
    } 

    return parent::render($request, $e); 
} 

아래 그것은 Laravel가

+0

감사합니다! 그랬어. 엉덩이에 그렇게 고통 스러웠습니다. 내가 똥을 집어 넣었을 때 원래 있었던 것을 덮어 쓰는 것 같아요. – Styphon

관련 문제