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

彼は、元の「ジョン」をデータベースに保存してから、データベースに保存された値と、ログイン フォームに入力された名前を strtolower することを意味します。その後、登録された方法と同じユーザー名が引き続き使用されます。

追加された例:

ログイン.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 を使用するつもりはありません。したがって、ケーキの save() メソッドを使用することで、大文字と小文字を区別する問題を保存できます。

register.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。そうすれば、どんなケースでもDBに保存できます。

于 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 に答える