Артём Мáлков

Рабочая авторизация на сайте через API в DLE

5 июн0 комм

Не знаю, как сейчас обстоят дела со встроенным API в CMS DataLife Engine, но в релизах ветки 10.* и 11.* точно есть одна проблема. А именно – при использовании метода:

$dle_api->external_auth($login, $password);

вместо реальной авторизации происходит простая проверка корректности логина и пароля указанного пользователя.

Очень странно, что в официальной документации этот метод описывается как «Авторизация по логину и паролю», хотя на деле, как я уже сказал ранее, происходит проверка корректности указанных данных.

Уверен, что многие, кто кастомизирует этот движок, столкнулись с этой проблемой, как, собственно, и я.

Весьма красивое решение мне удалось найти, создавая один из своих модулей, и выглядит оно так:

ini_set('error_reporting', 0);
ini_set('display_errors', 0);

define('DATALIFEENGINE', true);
define('ROOT_DIR', substr(dirname(__FILE__), 0, -12));
define('ENGINE_DIR', ROOT_DIR.'/engine');

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {

	include ENGINE_DIR.'/data/config.php';
	require_once ENGINE_DIR.'/modules/functions.php';
	include ENGINE_DIR.'/api/api.class.php';

	$login = (string)$_POST['login']; // Логин пользователя
	$password = (string)$_POST['password']; // Пароль пользователя

	if($dle_api->external_auth($login, $password)) {

		$_POST['login_name'] = $login;
		$_POST['login_password'] = $password;
		$_POST['login'] = 'submit';

		dle_session();

		require_once ENGINE_DIR.'/modules/sitelogin.php';

		echo '<script>window.location.replace(window.location.pathname);</script>'; // Обновляем страницу после авторизации

	} else {

		echo 'Данные не верны!';
	
	}

}

В этот PHP-скрипт (обработчик, который нужно размещать в папке /engine/ajax/ вашего сайта) через AJAX передаются данные, которые проверяются на корректность авторизации (через API) и уже посредством стандартной функции CMS происходит авторизация на сайте.

Стоит отметить, что способ универсален и не зависит от версии CMS.

Если что-то вам показалось непонятным – не стесняйтесь и задавайте свои вопросы в комментариях.

Рекомендуем к просмотру
Быстрый перенос сайта с одного домена на другой на OpenCart
Статьи и советы
Как включить отображение ошибок и предупреждений PHP?
Статьи и советы
Разрешаем гостям добавлять новости на сайте в DLE
Хаки
0
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
Подняться наверх
«Pandoge» - помощник вебмастера