CakePHP-Can';t使用Blowfish算法进行身份验证
让cakephp根据河豚存储的密码进行身份验证有点困难 在AppController中。设置全局组件。用户模型是CompaniesUser,它对应于磁盘上名为CompaniesUser.php的文件。密码哈希器是河豚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
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');
}