xのcaptchaにcaptchaにリダイレクトする方法cakephpの円形リダイレクトなしで試行されましたか?

StackOverflow https://stackoverflow.com/questions/3499011

質問

Core Authコンポーネントを使用しています。すべてのアクセス許可を管理するユーザーログインを作成しました。私がログイン監視を実装している方法は、 $this->Auth->user() app_controllerで。 app_controllerがサイクリングするたびに beforeFilter() 関数と !$this->Auth->user(), 、それは増加します Captcha.LoginAttempts セッション変数。いつ Captcha.LoginAttempts 3> 3、Captchasコントローラーにリダイレクトして、ユーザーが人間であることを確認する必要があるCaptcha画面を表示します。 (StackoverFlowがどのように行うかと同様)。

私が抱えている問題は、どこかで要素を使用している場合、またはページ上のケーキフレームワーク内の何かを参照している場合、リダイレクトを押して、実際のコントローラー/アクションの外部と呼ばれるアクセス要素/コンポーネントごとに無限の円形リダイレクトを引き起こします。 。これを実装するより良い方法はありますか?

これが私がいじっていた実際のコードです。しかし、それは基本的に吸う(IMO):

// this is in the app_controller beforeFilter() method.

if($this->Auth->user()) {
            $this->Session->delete('Captcha');
        } else {
            $this->Session->write('Captcha.LoginAttempts', $this->Session->read('Captcha.LoginAttempts') + 1);
            if ($this->Session->read('Captcha.LoginAttempts') > 3) {
                if (!$this->Session->read('Captcha.controller')) {
                    $this->Session->write('Captcha.controller', $this->params['controller']);
                    $this->Session->write('Captcha.action', $this->params['action']);
                }
                if ($this->Session->read('Captcha.fail') !== 'true') { // avoid circular reference redirects
                    $this->Session->write('Captcha.fail', 'true');
                    $this->redirect(array('controller' => 'captchas', 'action' => 'index'));
                }
            }
        }

円形の参照を避けようとする方法を見ることができます。しかし、その後、ユーザーはログインページに移動することができ、 Captcha.fail セッション変数はすでに設定されており、リダイレクトを無視します。これを実装するためのよりエレガントな方法が必要です。誰?

役に立ちましたか?

解決

通常、私はあなたがそれをしようとしている方法に答えようとしますが、あなたがより良いアイデアを求めたので、私がすることは、実際にログインページにCaptchaを持っていて、loginredirectのようなAuthComponentsの組み込みのメソッドとプロパティを使用することです。 AutoredIrect、およびlock()。次に、captchas.loginattempts変数に基づいて、Captchaをオン/オフにします。

あなたの現在の方法のために、私はあなたがこれを行うエレガントな方法を得るつもりはないと思います。ただし、AuthComponentのプロパティを変更して、必要なものを取得できる場合があります。 /captchas /indexが新しいログインフォームになるように、loginredirectとloginactionを変更してから、Captchaを成功させ、ログニクションを /users /loginなどに戻します。このように、誰かがCaptchaを実行せずにヒット /ユーザー /ログインを直接試みようとした場合、AuthComponentロジックは / /Captchas /Indexにリダイレクトします。

関連するマニュアルページを次に示します。

お役に立てれば!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top