CakeCan’t аутентификации с алгоритмом Blowfish

Возникли проблемы с получением CakePHP для аутентификации на пароле, сохраненном в blowfish.

В 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 Модель до сохранения элемента:

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-> Auth-> login () является чем-то вроде черного ящика, я не вижу, как выглядит вывод SQL в настоящее время. Я попробовал некоторые из руководств по использованию DebugKit, в настоящее время сообщает:
Sql Logs

Предупреждение Нет активных подключений к базе данных. <- теперь возвращаем 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

1

Решение

Я не слишком знаком с тортом, но, видя, что ваша проблема в БД, вы пытались открыть терминал и вывести базу данных general_log в режиме реального времени?

Я не вижу, как выглядит вывод SQL.

Например, используя mysql, вы можете сделать что-то вроде …

Проверьте, включен ли ваш общий журнал.

SHOW GLOBAL VARIABLES LIKE '%general_log%';

Если он выключен, ваш вывод будет выглядеть примерно так

vARIABLE_NAME
Значение                                      

general_log      
OFF                                         

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.

Тем не менее, кажется, что есть проблема с DebugKit, если вы оставите свой sql_dump.ctp Элемент макета в вашем файле просмотра как указано Вот.

Если вы оставили элемент макета sql_dump.ctp в файле представления, он будет использовать журналы, прежде чем DebugKit отобразит панель инструментов. Это не устраняет проблемы с входом в систему, но может помочь получить больше информации по этой проблеме.

Еще кое-что. Вы работаете в среде Windows? В вашем файле UsersController.php у вас непоследовательные направления косой черты, я бы выбрал все косые черты, но это может не иметь значения, если вы находитесь на сервере Windows, я полагаю.

0

Другие решения

Пройдя некоторое время в изучении базовых классов, чтобы выяснить, что происходит, мне удалось найти ответ. В строке базовой аутентификации 74 есть настройки $, которые, когда var_dumped не показывал никаких признаков настройки Blowfish.

Ниже устанавливает это. Не знаю, является ли это стандартным способом Cake для де-факто, или действительно, почему указание алгоритма blowfish в массиве Components не имеет значения, но, возможно, это поможет кому-то еще.

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector