2012-10-30 2 views
12

質問は、モジュールにModule.phpを設定して、ユーザがセッション中であるかどうかを確認する方法です。 彼がいない場合、彼をログインページにリダイレクトしたいです。セッションにログインしていない場合、ユーザをリダイレクトするためにZend Framework 2でModule.phpを設定する方法は?

セッションに参加していない(ログインしていない)ユーザが他のアクション(コントローラ)にアクセスする権限を持たせたくありません。

答えて

9

詳細は、ZF2のイベントで行う必要があります。click hereこのコードも役に立ちます。 http://pastebin.com/FFGVCpki

public function init() { 
    // Attach Event to EventManager 
    $events = StaticEventManager::getInstance(); 

    // Add event of authentication before dispatch 
    $events->attach ('Zend\Mvc\Controller\AbstractActionController', 'dispatch', array (
      $this, 
      'authPreDispatch' 
    ), 110); 
} 
public function authPreDispatch($event){ 
$target = $event->getTarget(); 
$serviceLocator = $target->getServiceLocator(); 
// Do what ever you want to check the user's identity 
$url = $event->getRouter()->assemble (array (
        "controller" => "<controller>" 
      ), array (
        'name' => '<route name>' 
      )); 
$response = $event->getResponse(); 
     $response->setHeaders ($response->getHeaders()->addHeaderLine ('Location', $url))); 
     $response->setStatusCode (302); 
     $response->sendHeaders(); 
     exit(); 
} 
+2

がモジュールからリダイレクトするよりよい方法はあります。 PHP? ZFの内部リダイレクションメカニズムを使用せずに直接ヘッダーを送るのは本当に好きではありません。 –

5

は、リダイレクトを使用していない、 'ルート' イベントを使用して行うのsetParam()メソッドは、いくつかのようなこのhttps://github.com/samsonasik/SanAuthWithDbSaveHandler/commit/e2ae4dfcebb7a952d7b1adaadcf6496c994423b9

+0

そのコードをここに貼り付けて、クイックリファレンスにもなります – codisfy

+0

しかし、表示されたURLは変更されませんか?それを行う方法はありますか? – herondale

2

を参照してください。

$e->getRouteMatch() 
->setParam('controller', 'Application\Controller\Login') 
->setParam('action', 'login'); 
関連する問題