登录前检查User表中的字段?

时间:2013-06-07 18:20:19

标签: php cakephp authentication login bcrypt

我正在将加密方法迁移到已经存在的~200个用户数据库到bcrypt。

我想要做的是当使用正常登录表单的用户提交请求时,应用程序将查询数据库并查看用户是否在“User.flag”字段中标记为“1”。如果他被标记为1,那么他将被发送到另一个登录表单,在那里他可以输入新密码以新方式加密。

如果用户被标记为0,那么他只是正常登录。

对于第一部分,我甚至不会使用旧密码来确认他们是真正的用户,我只会将他们输入的用户名与数据库中的用户名相匹配,与密码无关。原因是它似乎要简单得多,然后必须为大约200个用户实现我的旧加密方法,这些用户极不可能猜到彼此的用户名。

有没有人有任何关于如何做到这一点的例子?

2 个答案:

答案 0 :(得分:0)

你应该做的只是使用一个带有ID和PASSWORD的表格。

当用户提交该表单时,请检查他是否在旧的加密系统上,使用旧的加密检查他的密码,如果匹配,则将其重定向到更改密码页面,或者只是输入他的密码并更新他的密码在数据库中直接使用新加密。

答案 1 :(得分:0)

//AppController.php
public function beforeFilter(){

   $this->_new_encryption_check();

}

private function _new_encryption_check(){
    if ($this->request->data && $this->action == 'login'){
        $this->loadModel('User');
        //find user by whatever their login name is
        $user = $this->User->findByEmail($this->request->data['User']['email']);
        if ($user && $user['User']['flag'] == '1'){
            $this->Session->setFlash('You must reset your password for security purposes.', 'flash/error');
            $this-redirect('newEncryption/forPassword/url');
        }
    }

}

在允许他们在新的登录控制器功能中重置为新加密之前,请确保让他们验证旧密码。