CakePHP-Can';t使用Blowfish算法进行身份验证

CakePHP-Can';t使用Blowfish算法进行身份验证,php,cakephp,cakephp-2.5,Php,Cakephp,Cakephp 2.5,让cakephp根据河豚存储的密码进行身份验证有点困难 在AppController中。设置全局组件。用户模型是CompaniesUser,它对应于磁盘上名为CompaniesUser.php的文件。密码哈希器是河豚 App::uses('AuthComponent', 'Controller/Component'); App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth'); class AppController ex

让cakephp根据河豚存储的密码进行身份验证有点困难

在AppController中。设置全局组件。用户模型是CompaniesUser,它对应于磁盘上名为CompaniesUser.php的文件。密码哈希器是河豚

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

class AppController extends Controller {
    public $helpers = array('CustomHtml');
    public $components = array(
        'DebugKit.Toolbar',
        'Session',
            'Auth' => array(
                'loginRedirect' => array(
                    'controller' => 'dashboard',
                    'action' => 'something'
                ),
                'logoutRedirect' => array(
                    'controller' => 'users',
                    'action' => 'login'
                ),
                'authenticate' => array(
                    'Form' => array(
                        'userModel' => 'CompaniesUser',
                        'passwordHasher' => 'Blowfish'
                )
            )
        )
    );
登录CTP:

 <?php
         echo $this->Form->create('User', array('action' => 'login'));
         echo $this->Form->input('username');
         echo $this->Form->input('password');
         echo $this->Form->end('Login');
     ?>
该数据库似乎确实具有防喷密码

登录方法所在的UsersController.php

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

class UsersController extends AppController {

    public $uses = array(
        'Company','CompaniesUser'
    );



    public function login() 
    {
        //uses a different theme
        $this->layout = 'admin\login';

        if ($this->request->is('post')) {
            if (  $this->Auth->login() ) 
              return $this->redirect( $this->Auth->redirectUrl() );

            $this->Session->setFlash( __( Configure::read('UsersController.InvalidPassword') ), 'custom\flash' );
        }
    }

public function beforeFilter() 
    {
        parent::beforeFilter();
        $this->Auth->authenticate = array(
            'Basic' => array('userModel' => 'CompaniesUser'),
            'Form' => array('userModel' => 'CompaniesUser')
        );
        // Allow users to register and logout.
        $this->Auth->allow('register', 'logout', 'verify', 'verifyResend', 'verifyAuth');
    }
Cake仍然拒绝登录,考虑到$this->Auth->login()有点像一个黑盒子,我看不到SQL输出当前的样子。我尝试了使用DebugKit的一些指导,目前报告: Sql日志


警告:没有活动的数据库连接 我对cake不太熟悉,但看到您的问题似乎在db中,您是否尝试打开终端并实时输出数据库general_log

我看不到SQL输出当前的样子

例如,使用mysql,您可以执行以下操作

检查您的常规日志是否已打开

SHOW GLOBAL VARIABLES LIKE '%general_log%';
如果将其关闭,您的输出将类似

变量名称
一般日志 关
常规日志文件 /var/lib/mysql/something.log

所以你会像这样打开它

SET GLOBAL general_log = 'ON'
然后,如果您使用的是Ubuntu,您将打开日志,并使用

sudo tail -f -n300 /var/lib/mysql/something.log # same path as general_log_file value from db query
这样,当事情发生时,你就能确切地看到发生了什么。这以前救过我。注意,请确保在完成调试后关闭此选项

但是如果你

警告:没有活动的数据库连接

上面提到的一切都可能是一个没有实际意义的问题,您需要解决数据库连接的问题。也许可以试着浏览一下config/app.php

但是,如果将布局元素保留在视图文件中作为引用,则DebugKit似乎存在问题

如果您已将sql_dump.ctp布局元素保留在视图文件中,它将在DebugKit呈现工具栏之前使用日志。这并不能解决登录问题,但可以很好地帮助您获得有关该问题的更多信息


还有一件事。您是否在windows环境中工作?您的UsersController.php文件中有不一致的斜杠方向。我会选择所有正斜杠,但如果您使用的是windows服务器,我想可能不会有什么区别。

在对核心类进行了深入研究之后,我终于找到了答案。基线74有$settings,当var_转储时,它没有显示任何河豚设置的迹象

下面是这一点。不知道这是否是事实上的标准蛋糕方式,也不知道为什么在Components数组中指定blowfish algo没有任何区别,但这可能会帮助其他人

public function beforeFilter() 
{
    parent::beforeFilter();
    $this->Auth->authenticate = array(
        'Form' => array('userModel' => 'CompaniesUser','passwordHasher' => 'Blowfish')
    );

    // Allow users to register and logout.
    $this->Auth->allow('register', 'logout', 'verify', 'verifyResend', 'verifyAuth', 'login');
}

我相信,当您使用Blowfish散列程序设置Auth组件时,它会自动为您进行散列。由于您也在beforeSave中对其进行哈希处理,因此它很可能尝试使用哈希值的哈希值登录。有关详细信息和示例,请参阅。当您获得
$this->Form->create('User')
等时,为什么要使用
'userModel'=>'CompaniesUser',
?这不符合逻辑。作为一个初学者,不要脱离常规。一旦你掌握了事情的运作方式,你就可以做到这一点。我只会坚持使用
用户
模型。然后,所有这些都会在盒子里运行。在模型和公司之间建立了关系。用户是公司的子公司。i、 e.用外键输入。这是为了在我的代码中的其他地方访问公司。我可以很容易地更改控制器名称以匹配?您使用的是什么Cakephp版本?可以尝试以下几点:(1)
allow
您的
beforeFilter
中的
login
操作。(2) 将您的表单名称从
User
更改为
companyesuser
我看到
$this->Auth->allow('logout')
的错误,因为当用户未经身份验证时,未经身份验证的用户无需注销。
sudo tail -f -n300 /var/lib/mysql/something.log # same path as general_log_file value from db query
public function beforeFilter() 
{
    parent::beforeFilter();
    $this->Auth->authenticate = array(
        'Form' => array('userModel' => 'CompaniesUser','passwordHasher' => 'Blowfish')
    );

    // Allow users to register and logout.
    $this->Auth->allow('register', 'logout', 'verify', 'verifyResend', 'verifyAuth', 'login');
}