1

CakePHP上に構築されたいくつかの小さなウェブサイトを管理するためのシンプルなCMSを作成しました。プラグインを1.3から2.0に正常に移行した後、Cakeを最新バージョン2.1.2に更新した後、AuthComponentで問題が発生しています。

アプリケーションはほとんどのテーブルをプラグインと共有するため、プラグインのクラス名には、クラス名の重複を避けるためにすべてプラグインの名前が接頭辞として付けられます。UsersControllerそのため、メインアプリケーション用とPluginNameUsersControllerCMSプラグイン用(またはaPostsControllerとa )がある場合がありPluginNamePostsControllerます。$useTableプラグインモデルは、正しいデータベーステーブルを見つけることに依存しています(したがって、PluginNamePostsController引き続きを使用しますposts)。

Cakeの2.1。*ブランチにアップグレードしてから、を参照する代わりにAuthComponent存在しないpluginname_usersテーブルを想定しているため、は機能しなくなりましたusers

のカスタムテーブルを定義することは可能ですか、AuthComponentそれともこれを機能させる他の方法はありますか?また、この動作は予想されますか?

コンポーネントは次のように構成さPluginNameAppControllerれています。

  public $components = array(
    'Session', 'RequestHandler',
    'Auth'=> array(
      'loginAction' => array(
        'controller' => 'pluginname_users',
        'action' => 'login',
        'plugin' => 'pluginname'
      ),
      'loginRedirect' => array(
        'controller' => 'pluginname_posts',
        'action' => 'index',
        'plugin' => 'pluginname'
      ),
      'authenticate' => array(
        'Form' => array(
          'userModel' => 'PluginNameUser',
          'fields' => array('username', 'password')
        )
      )
    )
  );
4

1 に答える 1

1

AuthComponentは、実際にはテーブルなどを認識していません。カスタムモデルを使用すること$tableで、別のテーブルで機能するようにモデルを定義できます。したがって、最初に行うことは、適切なテーブルを使用するようにプラグインのモデルを設定することです。

class PluginNameUser extends PluginAppModel {
  public $table = 'users';
}

次に、ドット構文を使用してプラグインのモデルを使用するように認証方法に指示します。

'authenticate' => array(
   'Form' => array(
     'userModel' => 'PluginName.PluginNameUser',
     'fields' => array('username', 'password')
   )
 )

これで、FormAuthenticateが認証を試みると、そのモデルを使用しているユーザーを見つけようとします。このモデルは、PluginNameにあることがわかります。usersテーブルを使用するように設定したモデルをロードし、そこでユーザーを探します。

于 2012-05-02T14:24:56.740 に答える