Перейти к контенту

Модуль внешней авторизации


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

Название: Модуль внешней авторизации

Назначение: Проверка авторизован ли пользователь и вывод некоторой информации

Версия: v.1.0

<?
/*
	Скрипт внешней авторизации для IPB 2.2
	v.1.0
	By IT-Security (c) 2007
	Asafchik@inbox.ru / ICQ: 683993
*/
// Вставляем нужные файлы
require "forum/ips_kernel/class_db_mysql.php";
require "forum/conf_global.php";
// Создаём параметры подключения
$db = new db_driver_mysql;
$db->obj['sql_database']	 = $INFO['sql_database'];
$db->obj['sql_user']		 = $INFO['sql_user'];
$db->obj['sql_pass']		 = $INFO['sql_pass'];
$db->obj['sql_host']		 = $INFO['sql_host'];
$db->obj['sql_tbl_prefix']   = $INFO['sql_tbl_prefix'];
$db->obj['mysql_codepage']   = $INFO['mysql_codepage'];
// Подключаем базу
$db->connect();
if (isset($_COOKIE['pass_hash'])) $pass_hash = $_COOKIE['pass_hash'];
if (isset($_COOKIE['member_id'])) $member_id = $_COOKIE['member_id'];
$q = $db->query("Select joined, email, member_login_key, name from ibf_members where id='$member_id' and member_login_key='$pass_hash'");
$res = $db->fetch_row($q);
// Записываем из базы в переменные
$auth = 1;
$name = $res['name'];
$joined = $res['joined'];
$email = $res['email'];
$mkey = $res['member_login_key'];
$k =  md5($email.'&'.$mkey.'&'.$joined);
if (empty($name)) $auth = 0;
if ($auth == '0') 
{
	$name='Гость';
	$output='<FORM style="MARGIN: 0px" onsubmit=this.sbm.disabled=true; action=forum/index.php?act=Login&CODE=01 method=post>';
	$output.='<TABLE class=loginTable cellSpacing=0 cellPadding=0 border=0><TBODY>';
	$output.='<TR><TD class=loginTd>Логин: </TD>';
	$output.='<TD class=fastLogin><INPUT class=loginField style="WIDTH: 100px" maxLength=25 name=UserName></TD></TR>';
	$output.='<TR><TD class=loginTd>Пароль: </TD><TD class=fastLogin>';
	$output.='<INPUT class=loginField style="WIDTH: 100px" type=password maxLength=15 name=PassWord></TD></TR><INPUT class=loginField style="WIDTH: 100px" type=password maxLength=15 name=PassWord></TD></TR>';
	$output.='<TD class=loginTd align=right colSpan=2><INPUT class=loginButton type=submit value="Вход »" name=sbm></TD></TR>';
	$output.='<TR><TD class=forRegTd align=middle colSpan=2><A class=forRegLink href="forum/index.php?act=Reg&CODE=10">Забыл пароль</A> · <A class=forRegLink href="forum/index.php?act=Reg&CODE=00">Регистрация</A></TD></TR></TBODY></TABLE>';
	$output.="<INPUT  type=hidden value=2 name=a><INPUT type=hidden value=0 name=c><input type='hidden' name='login' value='login'><input type='hidden' name='autologin' value='1'><input type='hidden' name='CookieDate' value='1'></FORM>";
}
else 
{
	$name = $name;
	$output="<p align='left'>Привет, ".$name."!";
	$output.="<br><a href='forum/index.php?act=UserCP&CODE=00'>Профиль</a><br><a href='/forum/index.php?act=Msg&CODE=01'>ПМ</a>";
	$output.="<br><a href='forum/index.php?act=Login&CODE=03&k=".$k."'>Выход</a></p>";
}

?>

В $output падает форма авторизации или приветствие.

Ссылка на комментарий
Поделиться на других сайтах

У меня стоит версия форума 2.2.2

в кукисах member_id почему-то "0"

можно это как-нибудь исправить, чтобы было равно id пользователя ?

 

и ещё: нету случайно скрипта внешней регстрации ?

 

Вобщем я не знаю в чём может быть проблемма, но есть 2 форума:

первый на 127.0.0.1

второй на хостинге

Вот который находится на хостинге, там всё ОК.

Причём форумы точь-в-точь одинаковые.

Ссылка на комментарий
Поделиться на других сайтах

Вот "доработанная" версия скрипта ))

 

<?
/*
	Скрипт внешней авторизации для IPB 2.2
	v.1.1.2
	By IT-Security (c) 2007
	Asafchik@inbox.ru / ICQ: 683993
	Скрипт доработал: ]-[ @ c |{ e r
	http://Shelkovo.Org
	ICQ: 191 499 111
*/

// Укажите ваш префикс для кукисов (Оставьте пустым, если префикса нет) Например: "slf_"
$cokpref='slf_';

// Вставляем нужные файлы
require $_SERVER["DOCUMENT_ROOT"]."/forum/conf_global.php";
require $_SERVER["DOCUMENT_ROOT"]."/forum/ips_kernel/class_db_mysql.php";

// Создаём параметры подключения
$db = new db_driver_mysql;
$db->obj['sql_database']	 = $INFO['sql_database'];
$db->obj['sql_user']		 = $INFO['sql_user'];
$db->obj['sql_pass']		 = $INFO['sql_pass'];
$db->obj['sql_host']		 = $INFO['sql_host'];
$db->obj['sql_tbl_prefix']   = $INFO['sql_tbl_prefix'];
$db->obj['mysql_codepage']   = $INFO['mysql_codepage'];

// Подключаем базу
$db->connect();
if (isset($_COOKIE[$cokpref.'pass_hash'])) {$pass_hash = $_COOKIE[$cokpref.'pass_hash'];}
if (isset($_COOKIE[$cokpref.'member_id'])) {$member_id = $_COOKIE[$cokpref.'member_id'];}

$dbpref=$db->obj['sql_tbl_prefix'];
$q = $db->query("SELECT mgroup, joined, email, member_login_key, members_display_name FROM {$dbpref}members WHERE id='$member_id' AND member_login_key='$pass_hash'");
$res = $db->fetch_row($q);
$q2 = $db->query("SELECT avatar_location, avatar_size, avatar_type FROM {$dbpref}member_extra WHERE id='$member_id'");
$res2 = $db->fetch_row($q2);

// Записываем из базы в переменные
$auth = 1;
$name = $res['members_display_name'];
$memgroup = $res['mgroup'];
$joined = $res['joined'];
$email = $res['email'];
$mkey = $res['member_login_key'];
$k =  md5($email.'&'.$mkey.'&'.$joined);
if (empty($name)) {$auth = 0;}
if ($auth == '0')
{
$logtitle='Вход';
$name='Гость';
$output=
<<<HTML
<form action="/forum/index.php" method="post">
<table width="100%" border="0" style="text-align: left;">
<input type="hidden" name="act" value="Login" />
<input type="hidden" name="CODE" value="01" />
<input type="hidden" name="referer" value="{$_SERVER["REQUEST_URI"]}">
<input type="hidden" name="CookieDate" value="1" />
<tr><td>Логин:</td><td><input type="text" name="UserName" size="14" maxlength="32"></td></tr>
<tr><td>Пароль:</td><td><input type="password" name="PassWord" size="14" maxlength="32"></td></tr>
<tr><td colspan="2"><input type="checkbox" name="remember" checked="checked">Запомнить меня</td>
<tr><td></td><td align="right"><input type="Submit" value="Войти"></td></tr>
</tr>
</table>
</form>
<p align="center"><a href="/forum/index.php?act=Reg&CODE=10">Забыл пароль</a> · <a href="/forum/index.php?act=Reg&CODE=00">Регистрация</a></p>
HTML;
}
else
{

// Вытаскиваем аватар
$usavatar = $res2['avatar_location'];
$sizeavatar = $res2['avatar_size'];
$typeavatar = $res2['avatar_type'];

if ($typeavatar=='url' and $usavatar!='') {$urlavatar='';}
if ($typeavatar=='upload' and $usavatar!='') {$urlavatar='/forum/uploads/';}
if ($typeavatar=='local' and $usavatar!='') {$urlavatar='/forum/style_avatars/';}
if ($typeavatar=='' or $typeavatar=='local' and $usavatar=='') {$urlavatar='/forum/style_images/other/noavatar.gif';}
if ($sizeavatar!='') {list($avwid,$avhei)=explode("x", $sizeavatar);
$avsizet=' width="'.$avwid.'" height="'.$avhei.'"';}
elseif ($sizeavatar=='') {$avsizet='';}


if ($memgroup=='4') {$fadminurl='<a target="_blank" href="/forum/admin/"><font color="#e10000">Админцентр</font></a><br>';}
elseif ($memgroup!='4') {$fadminurl='';}

$name = $name;
$logtitle=('Привет, '.$name);
$output=
<<<HTML
<p align="left">
<img border="0" alt="Аватар" src="{$urlavatar}{$usavatar}" {$avsizet}"><br>
{$fadminurl}
<a href="/forum/index.php?act=UserCP&CODE=00">Профиль</a><br>
<a href="/forum/index.php?act=Msg&CODE=01">Личные сообщения</a><br>
<a href="/forum/index.php?act=Login&CODE=03&k={$k}"><font color="darkred">Выход</font></a></p>
HTML;
}


// Вывод скрипта (Можно убрать)
echo
<<<HTML

<table><tr><td> </td></tr></table>

<table cellspacing="1" cellpadding="2" width="160" bgcolor="#c0c0c0" border="0">
<tr><td background="/img/menu.gif" bgcolor="#8EA4CC"><font color="#0070A6" style="font-size: 9pt; font-weight:700"><center>{$logtitle}</center></font></td></tr>
<tr><td background="/img/fmenu.gif" bgcolor="#DADFEA" align="left">
{$output}
</td></tr></table>

HTML;
?>

 

Вот скриншот:

http://files.shelkovo.org/2007_05/1178508798.69.gif

Ссылка на комментарий
Поделиться на других сайтах

Укажите ваш префикс для кукисов

можно же взять из базы? в переменных ipsclass есть, смотри файл логин.пхп в папке действий пользователей

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Arhar,

 

Вы правы, т.к. у меня и префикс кукисов и БД один и тот же вот я сделал так (под себя).

Уже исправил.

Сейчас работаю над второй версией данного скрипта, где авторизация будет действительно "внешняя".

Возможно позже и регистрацию сделаю.

 

Укажите ваш префикс для кукисов

можно же взять из базы? в переменных ipsclass есть, смотри файл логин.пхп в папке действий пользователей

 

Да и кстати сделаю, чтобы вытаскивалось из бд.

Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...

Доделал мод регистрации и авторизации.

Теперь авторизация и выход происходит без использования форума.

Также сделал регистрацию с кетпатчей.

Выложил в файловый архив, остаётся только ждать, когда модераторы подтвердят.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.