【问题标题】:CakePHP 2.0 Acl + Auth + custom username fieldCakePHP 2.0 Acl + Auth + 自定义用户名字段
【发布时间】:2013-03-26 12:14:57
【问题描述】:

在我的 AppController 我有这个设置

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        )
     ),
    'Session',
    'DebugKit.Toolbar'
);

在我的用户模型中,我没有“用户名”字段,我有“电子邮件”,所以我将 $components 配置更改为:

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        ),
        'authenticate' => array(
            'Form' => array(
                'fields' => array(
                    'username' => 'email', 'password' => 'password'
                )
            )
        )
    ),
    'Session',
    'DebugKit.Toolbar'
);

通过这种方式,我不会收到错误“模型没有字段'用户名'”,但我的登录被拒绝。 所以我切换回之前的配置,修改了表格

ALTER TABLE users CHANGE COLUMN username email VARCHAR(45) NOT NULL UNIQUE;

它成功了..那么我之前的配置有什么问题?

【问题讨论】:

  • 您显示的查询是必要的,因为您将username 列更改为email,这正是您所描述的您想要的吗?如果这是一个粘贴错误并且实际上是相反的,请确保您的视图也有 User.email 输入字段,而不是复制/粘贴教程中的 User.username 示例。
  • 我不明白为什么使用“身份验证”配置没有对用户运行任何查询以检查凭据并立即拒绝身份验证

标签: cakephp authentication acl


【解决方案1】:

好的,感谢@Oldskool 提示,我恢复了

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        ),
        'authenticate' => array(
            'Form' => array(
                'fields' => array(
                    'username' => 'email', 'password' => 'password'
                )
            )
        )
    ),
    'Session',
    'DebugKit.Toolbar'
);

然后我也更改了登录视图(将用户名替换为电子邮件):

echo $this->Form->inputs(array(
  'legend' => __('Login'),
  'email',
  'password'
));

我认为登录表单是由 auth 组件管理而不是由 User 模型管理,并且用户名和电子邮件之间的映射只能在 Auth 组件配置中完成

【讨论】:

  • 您在视图中使用的字段名应该几乎总是与您的数据库中使用的字段名匹配,所以现在应该可以解决问题了。
  • 这很清楚,我只是以为它们是由登录 pahse 中的 Auth 组件管理的,但我错了 :)
猜你喜欢
  • 1970-01-01
  • 2020-09-09
  • 2011-09-26
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多