5

CakePHP1.3からCakePHP2.2.2に移行しており、単純な管理領域に基本Http認証を使用したいと考えています。私はそれを機能させることができず、ドキュメントのどこかが間違っていることを理解したと思っています。

ドキュメントから、私は次のようなことをしなければならないことを理解しました

public $components = array(
    'Auth' => array(
      'authenticate' => array(
        'Basic'
      ),
      'authError' => 'You may not access this area.',
      'authorize' => array('Controller')
    )
  );

有効なユーザー日付を返すためにBaseAuthenticateコンポーネントをさらに拡張する必要があることを理解していますが、上記の構成でも、ブラウザーのHttpアクセスダイアログがポップアップウィンドウで開くと予想されます。しかし、このようなことは何も起こりません。代わりに、存在しない/ users/loginにリダイレクトされます。Http Accessのログインビューが必要なのはなぜですか?私は混乱しています。

4

1 に答える 1

7

Authコンポーネントをコントローラー(またはAppController)に追加します

class ThingsController extends AppController {  
    var $components = array('Auth');
}

CakePHPはログインアクションを必要とするため、HTTPエージェントが認証の詳細を収集するUIを担当する基本認証を使用する場合でも、ログインを処理するコントローラーでアクションを指定する必要があります(基本の場合はWWW-Authenticate: Basicユーザーがまだ認証されていない場合は、ヘッダーを送信します)。

AuthCompoment'sを設定できますが$loginAction、これはデフォルトで(そして、規則に違反しないことをお勧めします)。のloginメソッドに設定されUsersControllerます。したがって、最初にで空のテンプレートを作成しView/Users/login.ctp、次に以下をに追加します。UsersController

class UsersController extends AppController {

    public $components = array(
        'Session',
        'Auth' => array(
            'authenticate' => array('Basic')
        )
    );

    public function login() {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash('Not able to login');
        }
    }

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

}
于 2012-09-25T18:00:38.283 に答える