2014-09-23 4 views
23

Yii2 응용 프로그램에서 모든 사용자를 인증해야합니다. 아직 인증되지 않은 경우 로그인 페이지로 리디렉션되어야합니다.Yii2 사용자가 먼저 인증하도록하는 글로벌 필터/동작

Yii1에서는 사용자가 로그인되어 있고 해당 클래스를 기본 구성 파일의 onBeginRequest 동작에 연결했는지 확인하는 클래스를 생성하여이 작업을 수행했습니다.

// Yii 1 
'behaviors' => array(
    'onBeginRequest' => array(
     'class' => 'application.components.RequireLogin', 
    ) 
), 

어떻게하면 Yii2에서 동일한 동작을 얻을 수 있습니까? 내가이 일을 할 수있는 행동을 사용할 수 있지만 모든 요청을 먼저 인증을 확인하기 때문에 내 기본 구성 파일에이 동작을 추가 wan't 알아요.

// Yii2 
public function behaviors() { 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      'rules' => [ 
       [ 
        'actions' => ['login', 'error'], 
        'allow' => true, 
       ], 
       [ 
        'allow' => true, 
        'roles' => ['@'], 
       ], 
      ], 
     ], 
    ]; 
} 
+0

basecontroller에 액세스 제어를 추가하려고 했습니까? – karlingen

답변

28

이 좋아, 그래서 형식에 대한 자세한 읽기 'components' => [...]

'as beforeRequest' => [ 
    'class' => 'yii\filters\AccessControl', 
    'rules' => [ 
     [ 
      'actions' => ['login', 'error'], 
      'allow' => true, 
     ], 
     [ 

      'allow' => true, 
      'roles' => ['@'], 
     ], 
    ], 
], 

아래에 다음 코드를 추가했다 :

는 작업 동작 방법은 다음과 같습니다 http://www.yiiframework.com/doc-2.0/guide-concept-configurations.html#configuration-format

+10

힌트 :이 코드는 응용 프로그램에 비헤이비어를 추가합니다. 구성 요소의 일부일 필요는 없습니다. 구성 자체의 일부 여야합니다. 그래서 jagsler가 ** 구성 요소가 아닌 ** 구성 요소 아래에 ** 작성한 이유입니다. 그리고 'someNameHere'=> ... '는 행동을 추가하는 구문입니다. [doc] (http://www.yiiframework.com/doc-2.0/guide-concept-configurations.html#configuration-format)을 찾으십시오. 나는 이것을 쓰는 데 몇 시간을 소비했기 때문에이 글을 쓴다. – robsch

+0

아주 좋습니다. 그것은 내 시간을 절약합니다. – israr

+0

또 다른주의 사항 : 컨트롤러와 액션'site/login'이 있어야합니다. 사용자가 로그인되어 있지 않고 규칙이 적용되지 않으면 호출됩니다. 구성에서 변경할 수 있습니다 (자세한 내용은 [여기] (http://www.yiiframework.com/doc-2.0/yii-web-user.html) 참조). 로그인 작업에 다른 이름이 있거나 다른 컨트롤러 인 경우 . – robsch

-1

I을 실제로 Yii2에 정통하지는 않습니다. (그러나 Yii1에 대해서도 마찬가지입니다.)

Yii1 및 Yii2에서 사용할 수있는 솔루션 중 하나는 마스터 컨트롤러 클래스에 필터 방법을 사용하는 것입니다. 일반적으로 단일 컨트롤러는 마스터 컨트롤러 역할을합니다. 당신이 가지고 있지 않다면 그것을 만들고 모두가 그것을 확장해야합니다. 이 필터는 필터가 아닌 '마스터 컨트롤러'(init())의 다른 메서드에서 구현할 수 있습니다. 모든 활동이 컨트롤러 클래스를 거치면 설정됩니다.