让cakephp对河豚存储密码进行身份验证时遇到一些麻烦。
在AppController中。设置全局组件。用户模型是CompaniesUser,它对应于名为CompaniesUser.php的磁盘上的文件。密码Hasher是Blowfish
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');
?>
保存项目之前的CompaniesUser Model:
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;
}
数据库确实看起来确实有密码。
登录方法所在的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-&gt; Auth-&gt; login()是一个黑盒子,我无法看到SQL输出目前是什么样的。我已经尝试了一些使用DebugKit的指导,目前报道: Sql Logs
警告没有活动的数据库连接。 &lt; - 现在返回更改了表单名称的SQL。
任何有关事物的想法都可以尝试吗?
更新:从登录表单返回的SQL如下所示。
SELECT `CompaniesUser`.`id`, `CompaniesUser`.`company_id`, `CompaniesUser`.`name`, `CompaniesUser`.`username`
, `CompaniesUser`.`password`, `CompaniesUser`.`active`, `CompaniesUser`.`user_activation_hash`, `CompaniesUser`.`user_password_reset_hash`, `CompaniesUser`.`user_password_reset_timestamp`, `CompaniesUser`.`holidays_allocated`, `CompaniesUser`.`admin`, `CompaniesUser`.`manager`, `CompaniesUser`.`first_run_finished`, `CompaniesUser`.`payment_active`, `Company`.`id`, `Company`.`name`, `Company`.`account_type`, `Company`.`active`, `Company`.`stripe_customer_id`, `Company`.`payment_active`
FROM `deckchair`.`companies_users` AS `CompaniesUser`
LEFT JOIN `deckchair`.`companies` AS `Company`
ON (`CompaniesUser`.`company_id` = `Company`.`id`)
WHERE `CompaniesUser`.`username` = 'user@test.com' LIMIT 1
答案 0 :(得分:0)
我对蛋糕不太熟悉,但看到你的问题似乎在db中你是否尝试过打开终端并实时输出数据库general_log?
我无法看到当前的SQL输出。
例如,使用mysql,您可以执行类似......
的操作检查您的常规日志是否已打开。
SHOW GLOBAL VARIABLES LIKE '%general_log%';
如果关闭,您的输出将类似于
的 VARIABLE_NAME 强>
<强>值强>
general_log
关闭
general_log_file
/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。
但是,如果您将sql_dump.ctp布局元素保留在视图文件中,并且引用here,那么DebugKit似乎确实存在问题。
如果您在视图文件中保留了sql_dump.ctp布局元素,它将在DebugKit呈现工具栏之前使用日志。这不能解决登录问题,但它可以很好地帮助获得有关该问题的更多信息。
还有一件事。你在Windows环境下工作吗?你在UsersController.php文件中有不一致的斜杠方向我会选择所有向前斜线,但如果你在Windows服务器上我可能没有区别。
答案 1 :(得分:0)
在通过核心课程进行一些拖网搜寻以确定发生了什么后,我设法闯入了答案。 Base Authenticate第74行有$ settings,当var_dumped没有显示Blowfish设置的任何迹象时。
下面说明了这一点。不知道这是不是事先标准的Cake做事方式,或者确实为什么在Components数组中指定blowfish算法没什么区别,但也许这会帮助其他人。
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');
}