0

ajaxポップアップである送信ページがあります。ユーザーがログインしていない場合は、モーダルログイン/サインアップダイアログがポップアップ表示されます。ログインすると、参照が何であったかを記憶していないため、メインページに移動します(実際の送信ページではなく、ログインページとしてトリガーされたため)。

そのリダイレクトURLをセッションに保存して、ログインに成功したときに、自分の適切なページにリダイレクトできるようにすることを考えていbeforeFilter()ます...

私はこのようなことを考えていました(疑似):

public function submit() {
    if (!$this->Auth->login()) {
        $this->Session->set('Auth.redirect', '/submit');
    }
}

次に、beforeFilterで、ログイン時に存在するかどうかを確認します。存在する場合は、セッションを削除して、そのURLにリダイレクトしますか?

これを処理するためのより良い方法はありますか、それとも私の合法ですか?

私のbeforeFilter:

public function beforeFilter() {
    $this->Auth->loginRedirect = array('controller' => '', 'action' => 'login');

    $this->Auth->allow(
            'Search',
            'loginSignUpPrompt'
            );
}
4

2 に答える 2

2

実際、Authコンポーネントにはすでにこの機能が組み込まれています。

public function login() {
  if ($this->request->is('post')) {
    if ($this->Auth->login()) {
      return $this->redirect($this->Auth->redirect());
    } else {
      $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
    }
  }
}

このメソッドのデフォルトは、ユーザーがアクセスしたページです。ただし、必要に応じて、Auth設定でオーバーライドできます。

http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html「ユーザーの識別とログイン」に関するセクションを参照してください。

于 2012-08-30T19:06:54.573 に答える
1

$this->redirect($this->referer());ユーザーが何らかのフォームデータを入力する必要がない限り (ログイン例のように)、使用できます。そのようなインスタンスに遭遇したとき、私はあなたがしていることをほとんど行い、以前の URL をセッション変数に保存し、それらを元の URL にリダイレクトするときにその変数を破棄します。hereの使用に興味があるかもしれない beforeRedirect() コールバック コンポーネントがあります。

于 2012-08-30T18:41:11.810 に答える