0

私はcakePHPプロジェクトでadmin_actionsを有効にしました。通常の従業員用のlogout( )と管理者ログアウト用のadmin_logout()があります。どちらのアクションもEmployeesControllerに属しています。

フラッシュメッセージを除いて、両方のログアウトアクション内のコードは同じです。

admin_logout():

$this->Session->destroy();
$this->Session->setFlash('You have been logged out of admin dashboard!','flash_success');
$this->redirect('/employees/login');

ログアウト()

$this->Session->destroy();
$this->Session->setFlash('You have been logged out!','flash_success');
$this->redirect('/employees/login');

ログアウトは完全に機能しており、セッションが破棄されます。ただし、admin_logout()ではありません。

デバッグのために、私はadmin_logout()でこれを試しました:

$this->Session->delete('Admin');
$this->Session->setFlash('You have been logged out of admin dashboard!','flash_success');
$this->redirect('/employees/login');

それも働いています。しかし、それでも完全なセッション変数を破壊することはありません。管理者と従業員の両方に通常のlogout()を使用することで、これを修正できます。しかし、好奇心から、ここで何がうまくいかないのでしょうか?

編集:必要な動作は、セッション変数の破棄、そしてフラッシュメッセージによるリダイレクトです。しかし、何が起こるかはリダイレクトであり、フラッシュメッセージが表示されますが、セッション変数は破棄されません!

4

3 に答える 3

1

問題の修正ではありませんが、ログアウトプロセスへのもう少し洗練されたアプローチ:
クラスに1つのログアウトメソッドのみを作成し、1つはプレフィックスなしで作成します。好き:

public function logout(){
}

adminここで、すべてのビューで、プレフィックスを明示的に無効にするログアウトリンクを作成します。

echo $this->Html->link('logout',
    array('admin'=>false,'controller'=>'employees','action'=>'logout')
);
于 2012-07-31T13:35:24.477 に答える
0

If you use 2.0 you should do

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

or

$this->Auth->logout();

for your redirects

于 2012-07-31T12:59:50.130 に答える
0

管理者用に個別のフラッシュメッセージが必要な場合は、logoutメソッドでifステートメントを使用するだけで、ユーザーが管理者であるかどうかを判断する変数を確認できます。

    if($this->Auth->user('is_admin')){
        $this->Session->setFlash(__('You have been logged out of admin dashboard!','flash_success'));
    }
    else{
        $this->Session->setFlash(__('You have been logged out!','flash_success'));

私はここで何かが欠けているかもしれませんが、そうではありません

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

セッションを破棄しますか?

于 2013-10-08T15:16:20.073 に答える