我试图让这个功能按照理想的方式工作,但没有太多运气。 好消息是,它是否有效。我唯一想要正常工作的是我设法的字段验证错误消息,但即使用户名和密码正确也无法登录。我已经回滚了这个功能,希望有人能为我解释一下。
function login() {
$this->layout = 'login';
$this->set('title_for_layout', 'Login');
if (!empty($this->data) && $id = $this->Auth->user('id')) {
$this->User->id = $id;
$this->User->saveField('last_login', date('Y-m-d H:i:s'));
$this->Session->setFlash(__('You have successfully logged in', true));
$this->redirect(array('action'=>'index'));
}
}
我在用户模型中设置的验证:
var $validate = array(
'username' => array(
),
'login' => array(
'rule' => 'isUnique',
'message' => 'This username has already been taken',
),
'pattern' => array(
'rule' => array('custom','/[a-zA-Z0-9\_\-]{6,}$/i'),
'message' => 'Must be 6 characters or longer with no spaces',
),
'length' => array(
'rule' => array('maxLength', 15),
'message' => 'Please keep username under 15 characters',
),
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Username cannot be empty',
),
),
'password' => array(
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Password cannot be empty',
),
'length' => array(
'rule' => array('between', 5, 15),
'message' => 'Passwords must be between 5 and 15 characters long with no spaces',
'on' => 'create',
)
)
);
我将取消设置登录的某些验证规则,我现在只想让验证以正确的方式运行。
真的,我有三个问题......
为什么我的验证无法正常工作?
如何在观看中显示AuthComponent
的消息?
如何暂时禁用表格中的modified
字段进行更新?
非常感谢!
答案 0 :(得分:1)
除了我在评论中发现的错误,我相当确定您的login
验证设置不正确。
这是你拥有的:
'login' => array(
'rule' => 'isUnique',
'message' => 'This username has already been taken',
),
'pattern' => array(
'rule' => array('custom','/[a-zA-Z0-9\_\-]{6,}$/i'),
'message' => 'Must be 6 characters or longer with no spaces',
),
'length' => array(
'rule' => array('maxLength', 15),
'message' => 'Please keep username under 15 characters',
),
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Username cannot be empty',
),
),
以下是我想要
的想法'username' => array(
'isUnique' => array(
'rule' => 'isUnique',
'message' => 'This username has already been taken'
),
'pattern' => array(
'rule' => array('custom','/[a-zA-Z0-9\_\-]{6,}$/i'),
'message' => 'Must be 6 characters or longer with no spaces',
),
'length' => array(
'rule' => array('maxLength', 15),
'message' => 'Please keep username under 15 characters',
),
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'Username cannot be empty',
),
),
指向CakePHP Book和CakePHP API的强制性链接。
<小时/> 在评论中回答OP的错误:
我现在看到你想要做什么。试试这个:
$id = $this->Auth->user('id');
if (!empty($this->data) && $id) {
$this->User->id = $id;
<小时/> 回答“如何从
AuthComponent
显示我的登录错误消息?”
要显示登录错误消息,您需要在布局或视图中为登录表单添加以下行。
echo $this->Session->flash('auth');
<小时/> 回答“如何暂时禁用CakePHP的
modified
行为?”:
嗯,简要介绍一下源代码和answer to this question on Cake's internal QA,您可以在保存数据之前添加类似的内容。
$this->data['User']['modified'] = false;
这告诉Cake不要更新修改后的字段。
有趣的是,从源代码可以看出,您可以轻松地将false
替换为true
,并且不会更新该字段。我不知道这是否确实如此。