5

認証が成功すると、簡単に呼び出すことができ、認証されたユーザーか匿名セッションかを判断するために、セッションに組み込まれるオブジェクトがありUserます(セキュリティ情報はありません)。ユーザーが自分の情報の一部またはすべてを変更できるパスはいくつかありますが、そのセッション値を最新の状態に保ちたいと思います。明白な答えは、コールバックの値を更新することですがafterSave()、もちろん、それはMVCに違反します。

セッションの書き込みをあちこちにドロップする必要がないように、すべての変更を1か所でキャプチャする別の方法はありますか?私は何も考えられず、他のアイデアも見つけることができませんでした。このようなことをしようとしているのは私だけですか?

ありがとう。

最終的な解決策:率直に言って、私はneilcrookesの応答を答えとしてマークしました。これは、より良い方法がないように思われるためです。しかし、この方法は私のOCD感覚に違反するので、私は少し異なる道を歩みました。私はUser::authenticate()、認証されたユーザーオブジェクトを呼び出し元に返して、メソッドが必要な処理を実行できるようにすることにしました。発信者が「したい」ことの1つは、セッションでその値を削除することです。冗長性ですが、非常に限られています。私の考えでは、それはモデルからセッションにアクセスするよりも良いと感じました(ただし、そうする場合は確かに気になりますが、シナリオを実行しない場合は気になります)。

4

4 に答える 4

8
//in users controller 
if ($this->User->save()) {
    $this->Auth->login($this->User->read());
    $this->Session->setFlash[.. etc]

そして、記録のために、私はneilcrooksの答えに同意しませんが、私はトロルに餌をやるのを控えます。

于 2009-06-09T07:46:34.637 に答える
4

一部の人は同意しないかもしれませんが、MVCをねじ込み、Model :: afterSave()で実行し、$ _ SESSIONを使用します-セッションが開始されていない場合、たとえばシェルでモデルに対して保存している場合、またはなにか。

MVCは一般的なパターンです-ガイドラインです。完全に適合しない何かを達成する方法を見つけようとして頭をぶつけたり、別の方法でそれを実行してより重要なものに移ったりすることができます。

炎を持ってきてください。

于 2009-06-08T19:45:38.417 に答える
1

保存後

このように使用する

$this->Session->write('Auth.User.mmid', $kinde['Kindle']['id']);
于 2017-05-04T13:38:59.813 に答える
-1

AppControllerセッションデータを最新の状態に保つために必要なコールバックを作成するために使用できるはずです。したがって、たとえば、UserモデルにtrueafterSave()というプロパティを設定させることができます。changed次に、AppController->afterFilter()そのプロパティを確認し、必要に応じてセッションデータを更新します。

または、ユーザー情報とセッションデータを更新するためのコンポーネントを作成することもできます。次に、ユーザー情報を変更する必要があるコントローラーは、そのコンポーネントを含める必要があります。

冗長なコードを記述したり、MVCを壊したりする必要はありません。

于 2011-04-03T13:15:16.770 に答える