.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
15 人のユーザが現在オンラインです。 (14 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 15

もっと...

.
.リンク集

メイン
   helper,component,script
     モデルをまたがった Auth 認証の継続
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kanbe
投稿日時: 2008-8-8 1:14
Baker ユーザ
登録日: 2008-4-17
居住地:
投稿: 40
モデルをまたがった Auth 認証の継続
現在、CakePHP 1.2 RC2 を使ってソーシャルブックマークのようなものをつくろうとしています。認証には Auth コンポーネントを使い、認証の取り回しは http://example.com/users/ 以下のメソッドならば問題ありません。

しかし、ソーシャルブックマークの登録ページ、例えば http://example.com/urls/add などに Bookmarklet 経由でアクセスさせるときに、ログインしていなければユーザ認証画面に飛ばすようにすると、リダイレクトされた時点で loginRedirect の値が消えてしまい戻り先がわからなくなってしまいます。

users_controller でも、 urls_controller でも

var $components = array('Auth');

は呼んでいるので、認証されなけれな http://example.com/users/login/ を呼ぶようになっています。

なぜいったん認証させにいくと Auth による認証が解除されてしまうのでしょうか?異なるモデル間では認証が継続しないとしたら、何が問題になっているのでしょうか。

似たような問題に遭遇しているのは英語のグループでも見かけたのですが、有効な解決策までたどり着いた人はいないようでした。。なにかヒントだけでもいただけると助かります。
custar
投稿日時: 2008-8-8 2:37
Cake 職人
登録日: 2007-5-31
居住地:
投稿: 189
Re: モデルをまたがった Auth 認証の継続
acl/auth の学習を一通り終えた直後なので、ちょっとは分かるかもしれません。

でも、正直なところ、説明されている内容をよく理解できませんでした。
ソースを見せてもらうのが一番いいのですが。

引用:

kanbeさんは書きました:

.... ログインしていなければユーザ認証画面に飛ばすようにすると、
リダイレクトされた時点で loginRedirect の値が消えてしまい
戻り先がわからなくなってしまいます。


デフォルトのままだと、
$this->Auth->autoRedirect = true の場合、

(1) http://example.com/urls/add は webroot/.htaccess により $_GET["url"] = "urls/add" として抜き出され、
(2) $url = "/urls/add" は Auth により Auth.redirect としてセッションに記録、
(3) 認証後、Auth.redirect セッション値 ("/urls/add") を使ってリダイレクト

という流れなのですが、これとどう違っているのか検証してみてください。


引用:

kanbeさんは書きました:

なぜいったん認証させにいくと Auth による認証が解除されてしまうのでしょうか?


??? 「認証させにいくと Auth による認証が解除されてしまう」?

まだ認証を済ませていないのに、認証が解除される?
ここの意味が分かりません。
kanbe
投稿日時: 2008-8-8 10:21
Baker ユーザ
登録日: 2008-4-17
居住地:
投稿: 40
Re: モデルをまたがった Auth 認証の継続
> custar さん
返信ありがとうございます。

実はソースコードの該当箇所などが含まれたものを投稿したのですが、XooPS のログインセッションが切れて、投稿が”なかったこと”になってしまい、力つきて内容を抜粋したものをさせていただきました。次からはメモ帳で推敲してから投稿するように致します。

いただきました(1)〜(3)の挙動を追ってみて、Auth.redirct の値がリダイレクト後にちゃんと入っているかという状況を確認してみたいと思います。

> まだ認証を済ませていないのに、認証が解除される?
> ここの意味が分かりません。

こちらは、私が Auth の動作について理解していないための齟齬かと思います。処理の流れを理解することで、疑問に思っていたことについては自己解決できるよう努力いたします。
custar
投稿日時: 2008-8-8 11:18
Cake 職人
登録日: 2007-5-31
居住地:
投稿: 189
Re: モデルをまたがった Auth 認証の継続
引用:


次からはメモ帳で推敲してから投稿するように致します。



ブラウザで編集作業をやるのは不便ですから、私も外部エディタで編集後貼り
付けています。ブラウザは名前通り、閲覧するためのソフトですから、複雑な
操作に耐えられませんね。

引用:


いただきました(1)〜(3)の挙動を追ってみて、Auth.redirct の値がリダイレク
ト後にちゃんと入っているかという状況を確認してみたいと思います。



所詮はメモリ上のプログラム、書かれた通りにしか動かないので、絶対に原因
はあります。追及してみてください。

引用:


Auth の動作について理解していないための齟齬



私も時間をかけて読み解こうとすれば目的とするところが分かるのでしょうが、
私自身も acl に関する作業中なので、御免なさいね。

引用:


処理の流れを理解することで、疑問に思っていたことについては自己解決でき
るよう努力いたします。



ソースを追いかけてみてください。きっと何か分かります。
admin
投稿日時: 2008-8-8 12:27
管理人
登録日: 2006-7-13
居住地:
投稿: 92
Re: モデルをまたがった Auth 認証の継続
セッションが切れてしまうと脱力しますね。
原稿、もったいないです。すみません。
今、XOOPSの設定を見返したところ、デフォルトの15分のままになっていました。
設定の変更ができることに今さら気がつき…。

とりあえず、30分にしておきました。
セキュリティ的には大丈夫なんでしょうかね。コレ?

よろしくお願いします。
kanbe
投稿日時: 2008-8-8 18:45
Baker ユーザ
登録日: 2008-4-17
居住地:
投稿: 40
Re: モデルをまたがった Auth 認証の継続
管理人様

お手数を煩わせて申し訳ありませんでした。
そもそも AutoLogin の機能を持たせている XooPS のフォーラムすらある状態では、多少時間を長くするくらいは大丈夫なのではないかと個人的には思います。

今後は出来るだけローカルのテキストエディタを活用しようと思いますが、最初の投稿で手間取る人もいるかもわからないので、大変ありがたい処置をありがとうございます。

今後ともどうぞよろしくお願いいたします。
kanbe
投稿日時: 2008-8-8 18:56
Baker ユーザ
登録日: 2008-4-17
居住地:
投稿: 40
Re: モデルをまたがった Auth 認証の継続
疑問を解決すべく、下記サイト

【CakePHP】AuthComponentについてのまとめ 【ざっくり基本編】 | ねねとまつの小部屋
http://blog.ne2ma2.com/archives/160

を参考にもっともシンプルな認証の仕組みをつくりました。

Users モデルに関しては動作を確認したあとで、別途 users とは「異なるモデル」の Comments というモデルをつくり、

users の login() の関数の中身を以下のようにしました。

  function login(){
  	if($this->Auth->isAuthorized()){
		this->redirect("/comments/index/");
	}
  }


Comments のコントローラはこうです。

class CommentsController extends AppController {

	var $name = 'Comments';
	var $components = array('Auth');
	
	function index(){
		if($this->Auth->isAuthorized()){
			$this->set('message',"認証されたユーザです");
		}else{
			$this->set('message',"ユーザ認証に失敗しました");
		}
	}

}


すると、/comments/index/ のビューにはちゃんと認証された旨のメッセージが表示されるということが確認できました。ログアウトしてから /comments/index/ にアクセすると、認証に失敗したメッセージが出ない代わりに、/users/login に飛ばされます(これはきっとAuthコンポーネントのデフォルトの挙動ですね)。

・・・ということで、そもそもこちらに質問したのは、正しいユーザ名とパスワードでログインした後に別のモデルのビューに移動すると、再度ログインフォームに飛ばされているという状況に陥っていたためだったのですが、このもっとも簡単な例では、モデルをまたいでも私が質問したような「認証が解除」され「認証フォームに飛ばされる」という現象は起きないということがわかりました。

となると自分が書いた元のプロダクトのコードのどこかがおかしいためにモデルをまたいだ際にあたかも「認証が解除」されたかのような状態になるのかと思いますので、あとは自分のコードを突き詰めて見直してみようかと思います。

十分な検証が足らずお騒がせするような形になってしまい、申し訳ございませんでした。
Nocco
投稿日時: 2008-8-8 23:21
Baker スタート
登録日: 2007-12-27
居住地: 大阪、日本
投稿: 18
Re: モデルをまたがった Auth 認証の継続
「app/app_controller.php」で基底クラス(AppController の拡張)として「UserAppController」なんかを作って、そこの「beforeFilter()」で

// Auth の設定
$this->Auth->sessionKey = 'User__Auth'; // sessionKey も指定したりして
$this->Auth->userModel = "User";
$this->Auth->loginRedirect = '/comments/index';
$this->Auth->logoutRedirect = '/users/login';
... ほか必要なら


とかすると「UserAppController」を拡張したコントローラではAuthのモデルとして必ず「User」を利用します。

自分が構築するときはこんな感じです
走り書きで申し訳ないです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .