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

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


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

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

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

Версия: 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 недели спустя...

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

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

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

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

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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