我创建了一个简单的CMS来管理基于CakePHP构建的几个小网站。成功将插件从1.3迁移到2.0后,在将Cake更新到最新版本2.1.2之后,我遇到了AuthComponent的问题。
插件的类名都以插件名称为前缀,以避免重复的类名,因为应用程序与插件共享其大部分表。因此,有些情况下,主应用程序为UsersController
,CMS插件为PluginNameUsersController
(或PostsController
和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')
)
)
)
);
答案 0 :(得分:1)
AuthComponent实际上并不知道表等。通过使用自定义模型,您可以在其上定义$table
以在不同的表上工作。因此,首先要设置插件的模型以使用正确的表:
class PluginNameUser extends PluginAppModel {
public $table = 'users';
}
然后,使用点语法告诉您的身份验证方法使用插件的模型。
'authenticate' => array(
'Form' => array(
'userModel' => 'PluginName.PluginNameUser',
'fields' => array('username', 'password')
)
)
现在,当FormAuthenticate尝试进行身份验证时,它将尝试使用该模型查找用户,该模型现在知道是在PluginName中。它加载模型,您已设置为使用users
表,并在那里查找用户。