0

私は現在、CakePhpを使用してWebサイトで簡単な認証を設定しています。この場合、ユーザーは任意のページにアクセスできますが、ログインが必要な管理システムがあります。

承認は正常に機能しており、管理ページのみが制限され、ログインページにリダイレクトされています。私が抱えている問題は、管理者としてログインできないことです。ハッシュ化されたパスワードを使用して、1つの管理レコードをデータベースに挿入しています。しかし、ログインしようとしても、本来のようにログインできませんif($this->Auth->login())。これが私が使用しているコードです:

アプリコントローラー:

class AppController extends Controller {

    public $components = array(
       'Session',
       'Auth' => array(
           'loginRedirect' => array('controller' => 'admins', 'action' => 'index'),
           'logoutRedirect' => array('controller' => 'admins', 'action' => 'index'),
       )
   );

   function beforeFilter() {

        if ($this->params['controller'] != 'admins') {
          $this->Auth->allow('*');
        }
        $this->Auth->loginAction = array('controller' => 'admins', 'action' => 'login');
  }

}

AdminsController:

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

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('login');//allow the login page to be accessed.
}

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

            if($this->Auth->login())
            {
                return $this->redirect(array('controller' => 'admins', 'action' => 'index')); 
            }
            else
            {
                //why is it getting to this point with correct details?
                debug('failed'); exit;
            }
    }
}

失敗することを意味する何かが欠けているかどうかわかり$this->auth->login()ませんか?管理者ではなくすべてのユーザーの名前を変更して、問題の原因であるかどうかを確認しましたが、結果は同じでした。管理者は、次のようにパスワードをハッシュするためにauthcomponentを使用してケーキを介して追加されています。

class Admin extends AppModel {

    public function beforeSave($options = array())
    {
        if(isset($this->data['Admin']['password'])) {
            $this->data['Admin']['password'] = AuthComponent::password($this->data['Admin']['password']);
        }

        return true;
    }
}
4

5 に答える 5

3

デフォルトでは、Auth はユーザー認証モデルを使用します。あなたの出力に基づいて、debug($this->request)「管理者」という名前のモデルを使用しているようです。userModelそのため、Auth コンポーネントの設定でキーを使用して指定します。詳細については、マニュアルを確認してください。

于 2013-01-17T19:25:49.483 に答える
1

誰かが同じ問題を抱えていた場合に備えて、問題の原因を突き止めましたが、それはばかげた間違いでした.

上記のコードからわかるように、Auth コンポーネントを AppController に設定し、次に AdminsController に設定しました。AppController でのみ必要なため、これが問題の原因でした。

于 2013-04-18T15:31:39.660 に答える
0

過去に同様の問題に遭遇したことがありますが、$this->request->dataプロパティをAuthComponent::login()直接メソッドに渡すとうまくいくことがあります。このような:

$this->Auth->login($this->request->data)

これに関する唯一の問題は、通過した情報のみがセッションに入れられることです。したがって、あなたの場合、セッションからのみユーザー名とパスワードにアクセスできます。

これが期待どおりに機能しないのには理由があると確信しています。

于 2013-01-18T14:43:51.500 に答える
0

使用している CakePhp のバージョンを指定していません。allow2.0 から 2.3 にアップグレードしたときにパラメータを変更する必要がありました - CakePhp クックブック / ACLの参照

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

    // For CakePHP 2.0
    $this->Auth->allow('*');

    // For CakePHP 2.1 and up
    $this->Auth->allow();
}
于 2013-03-30T00:31:23.153 に答える