authentication
で実行されているアプリケーションのプロセスを書き直していますZF2
。
呼び出されるサービスに応じて、ユーザーを認証するためのオプションがさらに必要です。
ブラウザからアクセスする Web アプリケーションの IE では Ldap 経由で認証し、API サービスではヘッダーのユーザー認証情報をチェックします。
abstract controller
ユーザーが認証されているかどうかのチェックを作成しました。そうでない場合は、ログイン ページにリダイレクトされます。
同じ認証プロセスを必要とするモジュール内のすべてのコントローラーは、このクラスを拡張します。
ログインに成功した後、元のリクエストを保存して元のリクエストにリダイレクトする必要があります。
私の質問は次のとおりです。
1. 抽象コントローラ -> onDispatch() メソッドは、配置するのに適切な場所ですか?
私が周りで見つけたすべての解決策は、常にModule.php
. Module.php は常に呼び出されるため、auth メソッドを区別するには、要求されたコントローラーが一致するかどうかを確認する必要があります。コントローラーにセットした方が「すっきり」しませんか?
2. リダイレクトまたはフォワードを使用して、元のコントローラーからログイン コントローラーに渡してから戻す必要がありますか?
元のリクエストも維持しながら、最善かつ最速のソリューションを探しているだけで、ブラウザ バーで URL が変更されてもかまいません。
3. URI をセッション クラス (認証モジュールから) に保存するのは正しいですか? リクエスト全体 (必要に応じて POST データを含む) を保存する方法はありますか?
抽象コントローラーは次のとおりです。
abstract class AbstractAuthActionController extends AbstractActionController {
public function onDispatch(MvcEvent $e) {
$serviceManager = $e->getApplication ()->getServiceManager ();
$auth = $serviceManager->get ( 'LdapAuth\Client\Ldap' );
if (! $auth->hasIdentity ()) {
$uri = $e->getRequest()->getRequestUri();
$callBackFunction = $this->getLdap ()->getCallBackFunction (); // = new SessionData();
$callBackFunction::setOriginalUri($uri); // function to store temporarly the uri
return $this->redirect ()->toRoute ( 'ldap-login-route' );
} else {
return parent::onDispatch ( $e );
}
}
}