4

私はCakePHPを初めて使用します。高低を検索しても、些細な問題のように思われる答えを見つけることができません。問題は、UserControllerを介してログインした後、$this->Auth->user()他のすべてのコントローラーで見つかったデータが失われることです。UserControllerに関連付けられていないビューには、常にnullデータが含まれ、$this->Auth->loggedIn()falseが返されます。

AppControllerクラスでbeforeFilter()は、ビューで変数を確認できるように、データを内部の変数に保存しようとしましたが、違いはありません。UserControllerクラスとAppControllerクラスの関連コードは次のとおりです。

class AppController extends Controller {

// Pass settings in $components array
public $components = array(
    'Session',
    'Auth' => array(
        'loginRedirect' => array('controller' => 'home', 'action' => 'index'),
        'logoutRedirect' => array('controller' => 'home', 'action' => 'index')
    )
);

public function beforeFilter() {
    //debug($this->Auth->user());
    $this->set('loggedIn', $this->Auth->user());    

    }

}

ユーザークラス:

App::uses('AppController', 'Controller');

class UsersController extends AppController {

public $helpers = array('Html', 'Form');
public $name = 'Users';

public function beforeFilter() {
    parent::beforeFilter();
}

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
        }
    }
}

public function logout() {
    return $this->redirect($this->Auth->logout());
}

}   

parent::beforeFilter()他のコントローラーでも使用するようにしています。

4

2 に答える 2

2

私は解決策を見つけたと信じています。ログイン後にいつも表示していたページであるHomeControllerでは、phpの終了宣言?>(これも必要ありませんでした)の後に見えない文字があったように見えるので、それを削除し?>ました。予想通り。

レイアウトで手動で使用しようとした後、何かがおかしいとのヒントがあり、HomeControllerクラスのsession_start()後の行についてエラーが発生しました。?>

于 2013-01-25T17:54:54.837 に答える
1

の代わりにクラスloggedInbeforeRender()関数を設定する必要があると思います。AppControllerbeforeFilter()

public function beforeRender() {
    $this->set('loggedIn', $this->Auth->user());   
}
于 2013-01-25T17:52:43.047 に答える