Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Как использовать БД пользователей IPB для внешнего скрипта

Опубликовано:

Я не совсем правильно назвал темку, простите. Вопрос такой - есть скрипт личного кабинета, нужно чтобы в нем использовались логин и пароль из БД моего форума. Как это реализовать примерно?

Рекомендованные сообщения

Опубликовано:
Вопрос такой - есть скрипт личного кабинета, нужно чтобы в нем использовались логин и пароль из БД моего форума. Как это реализовать примерно?

Можно запросом к базе данных.

Для 2.3 логин мы берем из таблицы ibf_members, поле name

А пароль проверяем в таблице ibf_members_converge поля converge_pass_hash и converge_pass_salt По алгоритму md5(md5($pass_salt).md5($pass_hash))

 

Как-то так ...

Опубликовано:
  • Автор
Можно запросом к базе данных.

Для 2.3 логин мы берем из таблицы ibf_members, поле name

А пароль проверяем в таблице ibf_members_converge поля converge_pass_hash и converge_pass_salt По алгоритму md5(md5($pass_salt).md5($pass_hash))

 

Как-то так ...

А можешь пример кода авторизации привести?

Опубликовано:
А можешь пример кода авторизации привести?

Легко. Для Битрикс.

 

<?
define("IPB_TABLE_PREFIX", "ibf_");
define("IPB_VERSION", "2");

AddEventHandler("main", "OnUserLoginExternal", Array("__IPBAuth", "OnUserLoginExternal"));
AddEventHandler("main", "OnExternalAuthList", Array("__IPBAuth", "OnExternalAuthList"));

class __IPBAuth
{
function OnUserLoginExternal(&$arArgs)
{
	extract($arArgs);

	////////// <settings> ////////////
	$table_user = IPB_TABLE_PREFIX."members";
	$table_converge = IPB_TABLE_PREFIX."members_converge";
	$groups_map = Array(
		/*'IPB Group ID' => 'Local Group ID',*/
		'4' => '1'
		);
	////////// </settings> ////////////

	global $DB, $USER, $APPLICATION;

	if(IPB_VERSION == '1')
	{
		$strSql = "SELECT * FROM ".$table_user." WHERE name='".$DB->ForSql($login)."' AND password='".md5($password)."'";
	}
	else
	{
		$strSql =
			"SELECT t1.* ".
			"FROM ".$table_user." t1, ".$table_converge." t2 ".
			"WHERE t1.name='".$DB->ForSql($login)."' ".
			"	AND t1.email = t2.converge_email ".
			"	AND t2.converge_pass_hash = MD5(CONCAT(MD5(t2.converge_pass_salt), '".md5($password)."'))";
	}

	$dbAuthRes = $DB->Query($strSql);
	if($arAuthRes = $dbAuthRes->Fetch())
	{
		$arFields = Array(
			"LOGIN" => $login,
			"NAME" => $arAuthRes['title'],
			"PASSWORD" => $password,
			"EMAIL" => $arAuthRes['email'],
			"ACTIVE" => "Y",
			"EXTERNAL_AUTH_ID"=>"IPB",
			"LID" => SITE_ID
			);

		$oUser = new CUser;
		$res = CUser::GetList($O, $B, Array("LOGIN_EQUAL_EXACT"=>$login, "EXTERNAL_AUTH_ID"=>"IPB"));
		if(!($ar_res = $res->Fetch()))
			$ID = $oUser->Add($arFields);
		else
		{
			$ID = $ar_res["ID"];
			$oUser->Update($ID, $arFields);
		}

		if($ID>0)
		{
			$USER->SetParam("IPB_USER_ID", $arAuthRes['id']);

			$user_group = $arAuthRes['mgroup'];
			$arUserGroups = CUser::GetUserGroup($ID);
			foreach($groups_map as $ext_group_id => $group_id)
			{
				if($ext_group_id==$user_group)
					$arUserGroups[] = $group_id;
				else
				{
					$arUserGroupsTmp = Array();
					foreach($arUserGroups as $grid)
						if($grid != $group_id)
							$arUserGroupsTmp[] = $grid;
					$arUserGroups = $arUserGroupsTmp;
				}
			}
			CUser::SetUserGroup($ID, $arUserGroups);
			$arArgs["store_password"] = "N";

			return $ID;
		}
	}
}

function OnExternalAuthList()
{
	return Array(
		Array("ID"=>"IPB", "NAME"=>"Invision Power Board")
		);
}
}
?>

Опубликовано:
  • Автор

А зачем именно для битрикс? И как примерно форма должна выглядеть, вернее она должна ссылаться к этому файлу? Дико извиняюсь за нубские вопросы, в php новичок.

Опубликовано:

Скрипт это учебный пример с сайта Битрикс. Он требует доработки для реального использования, но функцию проверки пароля и логина, выполняет корректно.

 

А зачем именно для битрикс?

Потому что я его знаю и работаю с ним. И проще найти авторизацию для него, чем для абстрактного кода.

 

И как примерно форма должна выглядеть, вернее она должна ссылаться к этому файлу?

Какая форма?

 

Дико извиняюсь за нубские вопросы, в php новичок.

Кто писал скрипт личного кабинета? Пусть допишет авторизацию из базы Битрикс.

Опубликовано:
  • Автор

Блин мне самому нужно найти эту фигню, никто мне не помогает да и нет знакомых которые помогли бы в этом.

Можно запросом к базе данных.

Для 2.3 логин мы берем из таблицы ibf_members, поле name

А пароль проверяем в таблице ibf_members_converge поля converge_pass_hash и converge_pass_salt По алгоритму md5(md5($pass_salt).md5($pass_hash))

 

Как-то так ...

Мне нужен пример этого кода

Опубликовано:
Мне нужен пример этого кода

Извиняюсь за глупый вопрос - что он вам даст? Нужно писать именно под ваш скрипт. Пример вам выше предоставили.

 

Если уж так нужно - пишите в личку - набросаю вам простенький пример с комментами.

Изменено пользователем L-7

Опубликовано:
  • Автор
Извиняюсь за глупый вопрос - что он вам даст? Нужно писать именно под ваш скрипт. Пример вам выше предоставили.

 

Если уж так нужно - пишите в личку - набросаю вам простенький пример с комментами.

Отправил ЛС

Опубликовано:
Извиняюсь за глупый вопрос - что он вам даст? Нужно писать именно под ваш скрипт.

Об этом я и говорил. :)

Не факт, что пароля и логина было достаточно.

И надо решать с помощью MySQL, а не через API

 

Если уж так нужно - пишите в личку - набросаю вам простенький пример с комментами.

ОК. Я тогда не буду заканчивать пример.

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.