2014-12-19 2 views
20

저는 여러 가지 방법으로 컨트롤러를 보유하고 있으며 각 방법의 시작시 특정 권한 확인을 추가해야합니다. 그래서, 같은 생성자에서이 검사를 넣어라우트 생성자 리디렉션이 작동하지 않습니다.

class AdminController extends BaseController { 

public function __construct() { 
    $this->isAuthorized(); 
} 

protected $layout = "layouts.main"; 

private function isAuthorized() { 
    if (!Session::get('userId')) { 
     echo "inside check"; // checking for debug purpose 
     return Redirect::to('login'); 
    } 
} 

/** 
* Admin dashboard view after authentication. 
*/ 
public function getDashboard() { 
    $this->layout->content = View::make('admin.dashboard'); 
} 

}

그것은 작동하지 않는 생각, 그냥 세션 내부의 메시지를 확인하고 로그인 페이지로 다시 리디렉션보다 대시 보드 페이지를 오히려로드 인쇄합니다. 나는 또한 이런 식으로 뭔가를 시도

,

public function getDashboard() { 
    $this->isAuthorized(); 
    $this->layout->content = View::make('admin.dashboard'); 
} 

나는이 이상한 return 문에이 메소드를 호출하려고

은, 그것은 내가 here에서 그 아이디어를 얻을

public function getDashboard() { 
    return $this->isAuthorized(); 
    $this->layout->content = View::make('admin.dashboard'); 
} 

작동합니다. 어떻게 생성자 메서드를 사용하여이 작업을 수행 할 수 있습니까? 어떤 도움이라도 대단히 감사합니다.

+0

왜 경로 필터를 사용하지 않습니까? 그것이 그들이하도록 설계된 것입니다. – Joe

+0

브라우저에 헤더를 보내기 전에 내용을 인쇄 할 수 없습니다 (이 경우 리디렉션 지시문). 'echo'를 제거하면 아마 작동 할 것입니다. – silkfire

+0

방금 ​​검사 한 내용이 있는지 확인하기 위해 echoed했습니다. echo를 제거해도 작동하지 않습니다. –

답변

59

실행하려면 Redirect을 반환하면 경로, 컨트롤러 작업 및 필터에서만 가능합니다. 그렇지 않으면 send()

Redirect::to('login')->send(); 

However you should really use a filter for this

+0

나는 laravel에서 불과 일주일 밖에 지나지 않았습니다.이를 달성하기 위해 설계된 필터를 사용해야합니다. –

+0

강력히 권장합니다. Laravel의 인증 기능을 다루는 문서의 일부를 읽는 것이 좋습니다. [여기 링크가 있습니다] (http://laravel.com/docs/4.2/security) – lukasgeiter

+0

사실 관리자 패널에서 Google로 로그인 만 허용하므로 내장 인증을 사용하지 않았으며 이미 읽었습니다. 정말 대단해. 저를 안내해 주셔서 고마워요. –

2

가를 분명히 \ 라우팅 \ 리디렉터를 사용할 수 있는지 확인 전화를해야; 이것을 생성자에 전달합니다. (Laravel 5.2)를 분명히 \ 라우팅 \ 재지

use Illuminate\Routing\Redirector; 

class ServiceController extends Controller { 

    public function __construct(Request $request, Redirector $redirect) { 
     $this->service = Auth::user()->Service()->find($request->id); 
     if (!$this->service) { 
      $redirect->to('/')->send(); 
     } 
    } 
0

이벤트, laravel 세트는 HTTP 헤더에 리디렉션하지만 리디렉션이없는 것처럼 또한 요청을 실행하는 것을 계속한다. 그래서 솔루션은 리디렉션 후에 die()를 사용합니다.

public function __construct(Request $request, \Illuminate\Routing\Redirector $redirecor) 
{ 
    //$bool = ... 
    if (false == $bool) { 
     $redirecor->action('[email protected]')->send() ; 
     die(); 
    } 
} 
관련 문제