CakePHP Authコンポーネントについて


CakePHPのAuthコンポーネントでユーザ認証機能を実現しようとしているのですが、
ログアウト後の以下の問題を解決できずにいます。

・ログインアクションがあるコントローラとは別のコントローラにアクセスした場合
 ログイン画面に飛ばずそのままページが表示されてしまう。

・ログインアクションがあるコントローラの別アクションにアクセスした場合
 ログイン画面に飛ぶ。
 

いずれのコントローラも 「$this->Auth->allow(××)」は記載しておりません。


もし原因・対策をご存じであれば是非ご教示下さい。
宜しくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/08/16 06:40:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:km1981 No.1

回答回数429ベストアンサー獲得回数49

ポイント50pt

>ログインアクションがあるコントローラとは別のコントローラにアクセスした場合

「別のコントローラ」というのは

1.すでにログアウトしたオブジェクトを指してますか?


2.ログアウトの際に

$this->redirect($this->Auth->logout());

処理はきちんと行われていますか?


3.セッションCookieの有効期間が長いのではないですか?

id:endam

回答ありがとうございます。

>1.すでにログアウトしたオブジェクトを指してますか?

⇒はい、その通りです。

>2.ログアウトの際に

>$this->redirect($this->Auth->logout());

>処理はきちんと行われていますか?

⇒上記の処理は行っています。

>3.セッションCookieの有効期間が長いのではないですか?

⇒Cookieはログイン時には使用しておりません。・・と言えば回答になっているでしょうか。

2011/08/09 14:42:11
id:chinchin-kozou No.2

回答回数198ベストアンサー獲得回数7

ポイント50pt

http://dwi.blog101.fc2.com/blog-entry-56.html

認証をしたいコントローラを指定しないと

認証処理が行われず、そのままページが表示されます。

もともとログインしてなくても表示出るようになってるから

ログアウト後にも表示されてるのではないでしょうか?

  • id:km1981
    >⇒Cookieはログイン時には使用しておりません。・・と言えば回答になっているでしょうか

    んん?
    AuthコンポーネントはセッションCookieを使っていますが
    どういうことでしょうか?


    下の内容は理解してますか?
    http://d.hatena.ne.jp/pplaceCEO/20100109/1263010987
  • id:endam
    申し訳ありません。セッションCookieを理解していませんでした・・。

    ログイン時のみセッションCookieは使用され、ログアウト時は破棄されるという認識に誤りははないでしょうか。

    上記の認識の上で、ログアウト後もセッションCookieによって質問に挙げた様にコントローラ別に挙動が違うという問題が起こるものなのでしょうか?

    返信宜しくお願い致します。
  • id:tdoi
    横から失礼します。
    Authコンポーネントのソースを見てもらうと手っ取り早いと思いますが、Authコンポーネントは認証情報を

    AuthComponent::sessionKey

    というで指定された名前でセッション中に格納します。
    もし、コントローラごとにこの値を変えているのであれば、あるコントローラでログアウトした情報は、別なコントローラでは関係ないこととなります。また、この値はデフォルトでは、

    Auth.{$userModel name}

    が設定されますので、ユーザ情報のモデル名がコントローラごとにことなっていても、同様なことが発生します。
    また、個人的な好みかもしれませんが、共通の処理は共通のところでやるべきかなと思います。
    複数のコントローラで同じ認証をAuthコンポーネントを用いてやるのであれば、AppControllerで制御してしまうのも手かと思います。


    この辺りは確認して頂いた上で、まずは、セッションに何が格納されているかを確認するのがよいかと思います。

    適当なところで、

    pr($_SESSION)

    とでもして、表示するか、

    $this->log(...);

    を使ってログに書き出すなりをすればよいでしょう。前者の方が手軽ですが、リダイレクトなどをする場合は後者の方が動きを追っかけやすいかもです。

    このように仕組んだ上で、

    1.ログイン中
    2.ログアウトして、別なコントローラのページにアクセスした際
    3.ログアウトして、同一のコントローラにアクセスした際

    で見比べてみると原因もおのずと分かってくると思います。


    何かの参考になれば。
  • id:km1981
    >ログアウト時は破棄されるという認識に誤りははないでしょうか。
    Authコンポーネントのソースを見てみたんですけど
    セッションCookieは破棄してません

    あとはtdoiさんが書いているとおりです
    僕もtdoiの提案を支持します

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません