2016-05-15 2 views
1

私は手動でAuthコンポーネントはまだSessionの古い値をフェッチしていますか?

public function beforeFilter(Event $event){ 
    //$companyId = $this->Companies->find(......... 
    $this->request->session()->write('Auth.User.company_id', $companyId); 
} 

そして、別のコントローラの様々なアクションで私は道

に従うことによって、セッションでその保存された企業IDを取得しようとしている。このコードによってAppController.phpののbeforeFilterで認証セッションのいくつかのキーを変更しています
public function add(){ 
    $companyId = $this->Auth->user('company_id'); 
    debug($companyId); die; 
} 

$companyIdの値を見ると、AppControllerのbeforeFilterメソッドで更新されていない古い値が表示されています。しかし、もし私がページをリフレッシュし、再びセッションを変更しないでください、私は$companyIdの値を更新します。

私の質問は、同じリクエストで別の場所で$this->Auth->user('company_id')コードで更新された値を取得できるように、認証セッションデータの値を更新する方法は何ですか?

答えて

1

認証コンポーネントによって使用されるセッションストレージは、バッファリングメカニズムを使用します。つまり、セッションからの値は通常、リクエストごとに1回だけ読み取られます(削除または空にされない限り)。

https://github.com/cakephp/cakephp/blob/3.2.8/src/Auth/Storage/SessionStorage.php#L81-L83

だからあなたのコントローラのアクションでのセッションから直接値を読み取るか、あるいは、しかし、セッションストレージに、直接セッションに

$user = $this->Auth->user(); 
if (is_array($user) && $user) { 
    $user['company_id'] = $companyId; 
    $this->Auth->setUser($user); 
} 
の線に沿って何かを書いていません
+0

助けてくれてありがとう – Yakng

関連する問題