Php 登录前是否检查用户表中的字段?

Php 登录前是否检查用户表中的字段?,php,cakephp,authentication,login,bcrypt,Php,Cakephp,Authentication,Login,Bcrypt,我正在将加密方法迁移到bcrypt已有的约200个用户的数据库 我想做的是,当使用普通登录表单的用户提交请求时,应用程序将查询数据库,并查看该用户是否在“user.flag”字段中标记为“1”。如果他被标记为1,那么他将被发送到另一个登录表单,在那里他可以输入新密码,以新的方式对其进行加密 如果该用户被标记为0,则他将正常登录 对于第一部分,我甚至不会使用旧密码来确认他们是真正的用户,我只会将他们输入的用户名与数据库中的用户名匹配,与密码无关。原因是,它似乎比仅为大约200个用户实现我的旧加密方

我正在将加密方法迁移到bcrypt已有的约200个用户的数据库

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

如果该用户被标记为0,则他将正常登录

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


有人举过这样做的例子吗?

你应该只使用一个带有ID和密码的表单

当用户提交该表单时,您会检查他是否使用旧的加密系统,使用旧的加密检查他的密码,如果密码匹配,您会将他重定向到“更改密码”页面,或者直接使用新的加密在数据库中更新他的密码

//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');
        }
    }

}

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

问题是,在发送登录之前,我不知道如何执行“检查”。我不知道如何检查用户是否被标记,所以这就是我想弄明白的,所以你的问题是如何在不重新加载页面的情况下做到这一点?
这极不可能猜到彼此的用户名。
是一个乐观的假设。如果我使用一些彩虹列表对您的密码检查进行暴力攻击,并为您的所有用户设置新密码,该怎么办?我建议用户正确登录,然后出于安全原因强制他更改旧密码!除此之外,这将消除您的问题。不,我是问如何对其进行编码,以便当用户登录时检查其标志,并根据标志值将其重定向到另一个页面,或正常登录。阿克塞尔;这个网站是一个非常小的东西,在封闭测试中,这是完全不可能发生的。为什么你不使用我告诉你的更安全、更简单的方式呢?这将避免人们重置其他人的密码,因为不太可能并不意味着不可能。它也会像你想要的那样,重置那个家伙的密码。