2012-04-16 8 views
0

これは私が達成したいものです:製品をクリック - >登録 - >チェックアウト 製品を選択したページがあり、すべての製品リンクはcheckoutコントローラに行き、URL経由でパラメータを渡します。例えばdomain.com/checkout/product-nameログインの代わりに登録ページにリダイレクトするにはどうすればよいですか?

しかし、チェックアウトコントローラを使用する前にユーザにログインしてもらいたいので、当然チェックアウトコントローラのbeforeFilter()$this->Auth->deny('index')と拒否しました。今、チェックアウトコントローラにアクセスしようとすると、ログインページにリダイレクトされます。代わりに登録ページに行く方法がありますか?

+0

は否定は皆をロックアウトのようなものです。あなたが望むものではありません。許可しないと、ユーザーは最初に認証されることになります。 – mark

+0

どうすれば "許可しない"のですか? – Strawberry

+0

authコンポーネントを使用し、Auth-> allow()を呼び出さないでください。 – mark

答えて

1

あなたはコントローラ+アクションを指定するには、$コンポーネント宣言(コントローラまたはAppControllerの)でloginAction変数を設定します。

public $components = array(
    'Auth' => array(
     'loginAction' => array(
      'controller' => 'users', 
      'action' => 'login', 
      'plugin' => 'users' 
     ), 
     'authError' => 'Did you really think you are allowed to see that?', 
     'authenticate' => array(
      'Form' => array(
       'fields' => array('username' => 'email') 
      ) 
     ) 
    ) 
); 

REF:http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#configuring-authentication-handlers

+0

したがって、私は明らかに不適切に認証されていますが、どうすれば適切なページフローを得ることができますか?製品をクリック - >登録 - >チェックアウト?後でRegisterアクションでチェックアウトするようにリダイレクトすることはできますが、製品ページの少しのロジックを変更して、ログインしていれば再度登録ページに移動する必要があります。これを行うより良い方法はありますか? – Strawberry

+1

あなたはそれをレイアウトしました。製品コントローラの操作では、ユーザーがログインしているかどうかを確認します。はいの場合は、製品ページを表示します。そうでない場合は、カート/セッションに製品を保存し、 '$ this-> redirect( 'register')'を呼び出してそれらをレジスタページに転送します。そしてあなたが言ったように、登録の後、 '$ this-> redirect( 'checkout')'のようなものを呼び出して、それらをチェックアウトページにリダイレクトします。 – Costa

+0

ニース!もう1つの最後の質問は、登録アクションで製品名をセッションに保存し、チェックアウト後にクリアすることです。 – Strawberry

関連する問題