0

私は最初の CakePHP プロジェクトに取り組んでいます。私はこれまで手続き型 PHP でしか作業したことがなく、Cake フレームワークのようなものを扱ったことがなかったので、歯が生える問題がいくつかあります。ログイン スクリプトが機能していないので、助けていただければ幸いです。

私のアプリはラグビー部のシステムになります。そのため、ログイン ページでは、ユーザーがドロップダウンからクラブを選択し、パスワードを入力する必要があります。

編集:

次のように動作します。

/アプリ/ウェブルート/View/Clubs/login.ctp

  <div class="clubs form">
<?php echo $this->Session->flash('auth'); ?>
<?php echo $this->Form->create('Club'); ?>
    <fieldset>
        <legend><?php echo __('Please select your club and enter your password'); ?></legend>

        <table>

           <tr> 

                <?php 
                echo $this->Form->input('id', array('label' => 'Club name', 'before' => '<td>', 'after' => '</td>', 'between' => '</td><td>', 'type'=>'select','options'=>$clubs)); 
           ?>
           <tr>
               <?php echo $this->Form->input('password', array( 'before' => '<td>', 'after' => '</td>', 'between' => '</td><td>')); 
           ?>
           </tr>
      </table>
    </fieldset>
<?php echo $this->Form->end(__('Login')); ?>
</div>

/App/Controller/AppController.php

    public $components = array(
     'Session',
        'Auth' => array(
            'authenticate' => array(
                'Form' => array(
                    'userModel' => 'Club',
                    'fields' => array(
                        'username' => 'id',
                        'password' => 'password'
                    )
                )
            ),
            'loginRedirect' => array('controller' => 'clubs', 'action' => 'index'),
            'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home'),
            'loginAction' => array('admin' => false, 'controller' => 'clubs', 'action' => 'login')
        ),
       'DebugKit.Toolbar'
   );

    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('logout', 'display');
    }

/App/Controller/ClubsController.php

    public function login() {

    if ($this->request->is('post')) {

        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirectUrl());         
        } 
        else {
            $this->Session->setFlash(__('Invalid club or password, try again.', 'default', array(), 'auth'));
            $this->set('clubs', $this->Club->find(
                'list', array(
                    'fields' => array('club_name'),
                    'conditions' => array('status' => '2')
                    )
                  )
            );
        }
    }
    else {
        $this->set('clubs', $this->Club->find(
            'list', array(
                'fields' => array('club_name'),
                'conditions' => array('status' => '2')
                )
            )
        );
    }

}

public function logout() {
    $this->Session->setFlash(__('You have been logged out.'));
    $this->redirect($this->Auth->logout());
}

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('add', 'login', 'index', 'logout', 'view');
}
4

1 に答える 1

1

これは、という名前の関数を呼び出すのではなく、:loginという名前のプロパティの存在をテストしています。login

if ($this->request->is('post')) {
    if ($this->Auth->login) {

authコンポーネントには、という名前のプロパティがないloginため、このテストは常にfalseになります。

に示されているように、ユーザーをログインさせるには、関数loginを呼び出す必要があります。

if ($this->request->is('post')) {
    if ($this->Auth->login()) {
于 2013-03-03T22:06:21.277 に答える