CakePHP:Can';当使用成员控制器而不是用户控制器时,请不要登录

CakePHP:Can';当使用成员控制器而不是用户控制器时,请不要登录,cakephp,login,cakephp-2.0,Cakephp,Login,Cakephp 2.0,我有一个非常奇怪的问题,我简直无法再弄明白了。我设置了一个cakephp项目,我使用一个用户控制器来处理身份验证,一切都很完美,100%。但是,我决定删除用户控制器、模型和视图,并将其替换为我的成员,因为成员将是我的主要用户,有一两个管理员需要登录 我现在在Members模型、控制器和视图中的内容与在Users中的内容相同,但默认情况下CakePHP希望使用Users模型和Users表。我做了很多调试,最终让CakePHP使用成员而不是用户,但现在我无法登录,因为我一直收到您的用户名和密码不正确

我有一个非常奇怪的问题,我简直无法再弄明白了。我设置了一个cakephp项目,我使用一个用户控制器来处理身份验证,一切都很完美,100%。但是,我决定删除用户控制器、模型和视图,并将其替换为我的成员,因为成员将是我的主要用户,有一两个管理员需要登录

我现在在Members模型、控制器和视图中的内容与在Users中的内容相同,但默认情况下CakePHP希望使用Users模型和Users表。我做了很多调试,最终让CakePHP使用成员而不是用户,但现在我无法登录,因为我一直收到您的用户名和密码不正确,请重试错误消息

这是我的代码,我希望有人能给我指出正确的方向

AppController.php 关于
beforeFilter()
需要注意的是,我已经尝试了Member的复数和单数形式,并且还添加了
$this Auth->allow()
函数,这样我就可以在Members表中编辑我的用户密码,以确保我的密码被正确哈希

另一个注意事项是,无论我在哪里看到,当使用
loginAction
时,它应该是这样的:

'loginAction' => array(
    'controller' => 'Members',
    'action' => 'login',
    'plugin' => 'members'
),
使用上述方法的问题在于,我的URL结构最终看起来像
/members/members/login
,因此我在AppController中省略了插件键值对,我猜这可能就是错误所在

Member.php MembersController.php /成员/login.ctp

正如我所说的,任何帮助都将是令人惊奇的,因为我已经经历了我所知道的一切,试图让它工作起来……

你有吗?如果不是现在就做

这里的例子非常清楚:

$this->Auth->authenticate = array(
    'Basic' => array('userModel' => 'Member'),
    'Form' => array('userModel' => 'Member')
);
您必须指定表单身份验证适配器应使用的模型

对于重定向问题,请定义

$this->Auth->redirectUrl = array(/* Whatever you need here */);
有吗?如果不是现在就做

这里的例子非常清楚:

$this->Auth->authenticate = array(
    'Basic' => array('userModel' => 'Member'),
    'Form' => array('userModel' => 'Member')
);
您必须指定表单身份验证适配器应使用的模型

对于重定向问题,请定义

$this->Auth->redirectUrl = array(/* Whatever you need here */);

尝试将其放入AppController.php文件的beforeFilter中

$this->Auth->loginAction = array('controller' => 'members', 'action' => 'login');

这会将您的应用程序指向正确的url进行登录。

尝试将其放入AppController.php文件的beforeFilter中

$this->Auth->loginAction = array('controller' => 'members', 'action' => 'login');

这会将您的应用程序指向正确的url进行登录。

对于我要登录的每种类型的组(例如管理员、用户或任何其他类型),您必须在控制器和模型中编写以下内容:

假设您有两种不同平台的用户可以访问,比如管理员和用户

在Controller/AppController.php中

public $components = array(
        'Acl',
        'Auth' => array(
            'authorize' => array(
                'Actions' => array('actionPath' => 'controllers/')
            )
        ),
        'Session');
在Model/Administrator.php中

 public function beforeSave() {
        if (isset($this->data['Administrator']['password'])):
            $this->data['Administrator']['password'] = AuthComponent::password($this->data['Administrator']['password']);
            return true;
        endif;
    }

 public $actsAs = array('Acl' => array('type' => 'requester'));

 public function parentNode() {
    if (!$this->id && empty($this->data)) {
        return null;
    }
    if (isset($this->data['Administrator']['group_id'])) {
        $groupId = $this->data['Administrator']['group_id'];
    } else {
        $groupId = $this->field('group_id');
    }
    if (!$groupId) {
        return null;
    } else {
        return array('Group' => array('id' => $groupId));
    }
}
在Controller/AdministratorsController.php beforeFilter()中

如果您的所有团队都有此功能,它应该会非常有效

我有三种类型的组:管理员、商店和用户,这对我很有用

对于我要登录的每种类型的组(例如管理员、用户或任何其他类型),您必须在控制器和模型中写入以下内容:

假设您有两种不同平台的用户可以访问,比如管理员和用户

在Controller/AppController.php中

public $components = array(
        'Acl',
        'Auth' => array(
            'authorize' => array(
                'Actions' => array('actionPath' => 'controllers/')
            )
        ),
        'Session');
在Model/Administrator.php中

 public function beforeSave() {
        if (isset($this->data['Administrator']['password'])):
            $this->data['Administrator']['password'] = AuthComponent::password($this->data['Administrator']['password']);
            return true;
        endif;
    }

 public $actsAs = array('Acl' => array('type' => 'requester'));

 public function parentNode() {
    if (!$this->id && empty($this->data)) {
        return null;
    }
    if (isset($this->data['Administrator']['group_id'])) {
        $groupId = $this->data['Administrator']['group_id'];
    } else {
        $groupId = $this->field('group_id');
    }
    if (!$groupId) {
        return null;
    } else {
        return array('Group' => array('id' => $groupId));
    }
}
在Controller/AdministratorsController.php beforeFilter()中

如果您的所有团队都有此功能,它应该会非常有效

我有三种类型的组:管理员、商店和用户,这对我很有用

我确实阅读了它,并在我的AppController中尝试了以下操作:
'authorize'=>array('controller','Actions'=>array('actionPath'=>'controllers','userModel'=>'Member'),
,但我现在会尝试上面的操作,我实际上没有重命名这些文件。我有一个members和一个users表,我从中构建了我的模型和控制器。我的初始用户表只是处理身份验证,而我的成员包含了更多关于成员的详细信息。相信我,我不会选择在Cake上超越常规,如果这对这个项目有意义的话,我更愿意与用户打交道。好的,我添加了你建议的代码,但是结果与我在Auth components数组中为此做的实现没有太大的不同。然而,现在发生的事情是,该站点将您重定向到/members/pages/login而不是/members/login$this->Auth->redirectUrl需要设置为登录后应该重定向到的任何位置。我确实阅读了它,并在我的AppController中尝试了以下操作:
'authorize'=>array('controller','Actions'=>array)('actionPath'=>'控制器','userModel'=>'成员'),),
但我现在就试试上面的方法。我实际上没有重命名文件。我有一个成员和*有一个用户表,我用它构建了我的模型和控制器。我的初始用户表只是处理身份验证,而我的成员在成员的详细信息方面包含了一大堆。相信我,我不会选择超出这个范围Cake的规范,如果这对这个项目有意义的话,我更愿意与用户打交道。好的,我添加了你建议的代码,但是结果与我在Auth components数组中为此所做的实现没有太大的不同。但是,现在发生的事情是网站将你重定向到/members/pages/login而不是/members/login$this->Auth->redirectUrl需要设置为登录后应该重定向到的任何位置。您只需创建一个