Информер курса валют ЦБ РФ   •   Магазин расширений
929 просм
0 комм
Поделиться:

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

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

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

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

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

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

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

<?php

	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") {

		require_once ENGINE_DIR."/modules/functions.php";
		include ENGINE_DIR."/api/api.class.php";

		$login = $dle_api->db->safesql((string)trim(strip_tags($_POST["login"]))); // Логин пользователя
		$password = $dle_api->db->safesql((string)trim(strip_tags($_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 "Данные не верны!";
	
		}

	} else {

		die();

	}

?>

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

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

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

0
комментариев
Гостям запрещено учавствовать в обсуждениях сайта. Авторизуйтесь, чтобы иметь возможность оставить свое мнение о материале или задать вопрос.
Подняться наверх