Jump to content
Дизайн и модификация Invision Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
vano007

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

Recommended Posts

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

Share this post


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

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

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

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

 

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

Share this post


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

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

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

 

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

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

Share this post


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

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

 

<?
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")
		);
}
}
?>

Share this post


Link to post

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

Share this post


Link to post

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

 

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

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

 

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

Какая форма?

 

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

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

Share this post


Link to post

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

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

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

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

 

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

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

Share this post


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

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

 

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

Edited by L-7

Share this post


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

 

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

Отправил ЛС

Share this post


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

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

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

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

 

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

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

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...