1

我正在尝试使用户名不区分大小写,但我仍然希望以与注册时相同的方式存储用户名。因此,如果约翰要登录,他将能够输入“约翰”和他的密码。

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            $this->redirect($this->Auth->redirect());   
        } else {
            $this->Session->setFlash('Your username/password combination was incorrect');
        }
    }
}

我会以某种方式调整上面的代码还是执行自定义 SQL 查询?

任何帮助将非常感激。非常感谢

4

5 回答 5

3

他的意思是将原始的“John”存储在数据库中,然后将数据库保存的值和登录表单上的输入名称降低。然后,您仍然拥有与注册方式相同的用户名。

示例添加:

登录.ctp

echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'register')));
echo $this->Form->input('User.username', array('label' => 'First Name:'));
echo $this->Form->input('User.password', array('label' => 'Password', 'type' =>   'password', 'value' =>  false));
echo $this->Form->submit('Register');
echo $this->Form->end();

考虑到当用户在那里输入用户名和密码时。假设我使用的是用户名“John”。大写的 J 是我们要确保在数据库中的内容。我们不会在保存数据时使用 strtolower。因此,通过使用 cake 的 save() 方法,我们可以完成保存区分大小写的问题。

注册.ctp

public function register()
{

    if ($this->Auth->loggedIn()) {
        $this->redirect(array('controller' => 'users', 'action' => 'login'));
    }
    if ($this->request->is('post')) {
       if ($this->User->User->saveAll($this->request->data)
       {
           $this->Session->setFlash(__('Your account has been created', true));
           $this->redirect(array('controller' => 'users', 'action' => 'index'));
       }}

现在,当我们执行登录操作时:

if ($this->request->is('post')) {
 if ($this->Auth->loggedIn()) {
       $logged = $this->User->query('Your sql query matching username/password with strtolower, if you need to implement security hash from cakephp you can do that through cakephp hash method');
     }
 }

基本示例,但应该有所帮助

于 2012-07-16T18:33:00.013 回答
1

只需strtolower在保存(或检查它)之前使用 php 函数。

于 2012-07-16T18:22:06.967 回答
1

当您验证您的登录时,请执行以下操作:

$query = "SELECT * FROM table WHERE LOWER(username) = '". strtolower($username)."'";

这会将您的列、用户名小写,并评估它是否等于小写$username。这样,您可以将任何情况存储在您的数据库中。

于 2012-07-16T18:46:52.387 回答
1

CakePHP 不区分大小写。它构建了一个非常通用的查询来根据数据库中的用户名检查您的条目。

$conditions = array(
    $model . '.' . $fields['username'] => $username,
    $model . '.' . $fields['password'] => $this->_password($password),
);

可能是数据库设置导致您的设置区分大小写。

例如,在我所有的网站上,我的用户名都不区分大小写,而且我没有对代码做任何特别的事情。

于 2012-07-16T19:44:42.380 回答
0

在调用 $this->Auth->login() 之前,添加以下行:

$this->request->data['User']['username'] = strtolower($this->request->data['User']['username']);

简单的!

于 2012-10-03T18:40:19.407 回答