CakePHP 2.x - 使用Blowfish通过电子邮件对用户进行身份验证

时间:2015-04-06 13:08:28

标签: php email cakephp authentication

所以,我正在尝试在CakePHP中使用电子邮件而不是用户名来进行身份验证,这个字段在我的数据库用户表中甚至没有。首先我试图谷歌,我已经尝试过这些: Cakephp 2.0 Authentication using email instead of username Using email instead of username in CakePHP Auth Component 和其他几个,但似乎没有任何工作 - 仍然我得到“不正确的数据”错误。下面是我的代码

AppController.php

class AppController extends Controller {

public $components = array(
    'Session',
    'Auth' => array(
        'userModel' => 'User',
        'loginRedirect' => array(
            'controller' => 'pages',
            'action' => 'display'
        ),
        'logoutRedirect' => array(
            'controller' => 'pages',
            'action' => 'display',
            'home'
        ),
        'authenticate' => array(
            'Form' => array(
                'fields' => array(
                    'username' => 'email',
                    'password' => 'password'
                ),
                'passwordHasher' => 'Blowfish'
            )
        )
    )
);

public function beforeFilter(){
    $this->Auth->allow('index', 'view');
}

UsersController.php

public function add() {
        if ($this->request->is('post')) {
            $this->User->create();
            $this->request->data['User']['role'] = "user";
            if(strcmp($this->request->data['User']['password'], $this->request->data['User']['repeat']) == 0){
                if ($this->User->save($this->request->data)) {
                    $this->Session->setFlash(__('Użytkownik zarejestrowany.'));
                    return $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
                }
                else $this->Session->setFlash(__('Wystąpił błąd, spróbuj ponownie.'));
            }
            else $this->Session->setFlash(__('Wpisane hasła się nie zgadzają'));
        }
    }

public function login(){
        if($this->request->is('post')){
            if($this->Auth->login()){
                return $this->redirect($this->Auth->redirectUrl());
            }
            $this->Session->setFlash(__('Nieprawidłowe dane, spróbuj ponownie'.$this->Auth->login()));
        }
    }

login.ctp

<div class="users form">
    <?php echo $this->Session->flash('auth'); ?>
    <?php echo $this->Form->create('User'); ?>
        <fieldset>
            <legend>
                <?php echo __('Zaloguj się'); ?>
            </legend>
            <?php
                echo $this->Form->input('email' /*I also tried with username instead of email here*/, array('label' => 'Email'));
                echo $this->Form->input('password', array('label' => 'Hasło'));
            ?>
        </fieldset>
    <?php echo $this->Form->end(__('Zaloguj')); ?>
</div>

编辑:这是User.php

App::uses('AppModel', 'Model');
App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth');

class User extends AppModel {

    public $validate = array(
        'email' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'Email jest wymagany'
            )
        ),
        'password' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'Hasło jest wymagane'
            )
        ),
        'repeat' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'Powtórz hasło'
            )
        ),
        'identicalFieldValues' => array(
            'rule' => 'identicalFieldValues',
            'message' => 'Wpisane hasła się nie zgadzają'
        )
    );

    public function identicalFieldValues(){
        return $this->data['User']['password'] === $this->data['User']['repeat'];
    }

    public function beforeSave($options = array()){
        if(isset($this->data[$this->alias]['password'])){
            $passwordHasher = new BlowfishPasswordHasher();
            $this->data[$this->alias]['password'] = $passwordHasher->hash(
                $this->data[$this->alias]['password']
            );
        }
        return true;
    }
}
第二次编辑:我读到问题可能是sql中varchar的大小,所以我把它从50改为130,删除了用户,换了一个新的,但我还是无法登录。

第三次编辑:我做了一个完全新的,干净的蛋糕项目,没有密码哈希,但仍然通过电子邮件登录,但仍然得到“不正确的数据”-.-

0 个答案:

没有答案