2

認証を処理するコントローラープラグインを作成しました。ユーザーがログインせずにページにアクセスしようとすると、アクセスしようとしていたページのルートが保存され、ログイン ページに転送され、ユーザーがログインすると、アクセスしようとしていた場所にリダイレクトされます。 .

ただし、ユーザーがログアウト中に存在しないページにアクセスしようとすると、サインイン フォームに転送されますが、ユーザーがサインインするとエラーが発生します。

ユーザーがサインインする前に 404 エラーを表示するにはどうすればよいですか? dispatchLoopStartup() 内でルートが有効かどうかを検出する必要があると思います。それ、どうやったら出来るの?または、これを行う他の方法はありますか?

class Chronos_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            $request->setParam('userName', $auth->getIdentity());
        } else {
            $request->setParam('origModule', $request->getModuleName())
                    ->setParam('origController', $request->getControllerName())
                    ->setParam('origAction', $request->getActionName())
                    ->setModuleName('default')
                    ->setControllerName('sign')
                    ->setActionName('in');
        }
    }
}
4

1 に答える 1

2

次のようなものを試してください。

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
    $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
    $auth = Zend_Auth::getInstance();
    if ($auth->hasIdentity()) {
        $request->setParam('userName', $auth->getIdentity());
    } else if ($dispatcher->isDispatchable($request)) {
        $request->setParam('origModule', $request->getModuleName())
                ->setParam('origController', $request->getControllerName())
                ->setParam('origAction', $request->getActionName())
                ->setModuleName('default')
                ->setControllerName('sign')
                ->setActionName('in');
        }
    }
于 2012-11-12T09:05:32.753 に答える