IT-Security Опубликовано 30 Апреля 2007 Жалоба Поделиться Опубликовано 30 Апреля 2007 Название: Модуль внешней авторизацииНазначение: Проверка авторизован ли пользователь и вывод некоторой информацииВерсия: 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 падает форма авторизации или приветствие. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
]-[ @ c |{ e r Опубликовано 6 Мая 2007 Жалоба Поделиться Опубликовано 6 Мая 2007 У меня стоит версия форума 2.2.2в кукисах member_id почему-то "0"можно это как-нибудь исправить, чтобы было равно id пользователя ? и ещё: нету случайно скрипта внешней регстрации ? Вобщем я не знаю в чём может быть проблемма, но есть 2 форума:первый на 127.0.0.1второй на хостингеВот который находится на хостинге, там всё ОК.Причём форумы точь-в-точь одинаковые. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
]-[ @ c |{ e r Опубликовано 7 Мая 2007 Жалоба Поделиться Опубликовано 7 Мая 2007 Вот "доработанная" версия скрипта )) <? /* Скрипт внешней авторизации для 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 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 7 Мая 2007 Жалоба Поделиться Опубликовано 7 Мая 2007 Укажите ваш префикс для кукисовможно же взять из базы? в переменных ipsclass есть, смотри файл логин.пхп в папке действий пользователей Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
]-[ @ c |{ e r Опубликовано 8 Мая 2007 Жалоба Поделиться Опубликовано 8 Мая 2007 Не хочется инклудить лишние файлы Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
IT-Security Опубликовано 9 Мая 2007 Автор Жалоба Поделиться Опубликовано 9 Мая 2007 Как я вижу это не префикс кукисов, а префикс таблицы. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 10 Мая 2007 Жалоба Поделиться Опубликовано 10 Мая 2007 да он и там, и там используется)))а надо две раздельные переменные Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
anaxronix Опубликовано 19 Мая 2007 Жалоба Поделиться Опубликовано 19 Мая 2007 Тоже пригодился мод.Спасибо. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
]-[ @ c |{ e r Опубликовано 24 Мая 2007 Жалоба Поделиться Опубликовано 24 Мая 2007 Arhar, Вы правы, т.к. у меня и префикс кукисов и БД один и тот же вот я сделал так (под себя).Уже исправил.Сейчас работаю над второй версией данного скрипта, где авторизация будет действительно "внешняя".Возможно позже и регистрацию сделаю. Укажите ваш префикс для кукисовможно же взять из базы? в переменных ipsclass есть, смотри файл логин.пхп в папке действий пользователей Да и кстати сделаю, чтобы вытаскивалось из бд. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 24 Мая 2007 Жалоба Поделиться Опубликовано 24 Мая 2007 регистрацию лучше максимально привязывать к защитам от ботов, если надумаешь делать Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
]-[ @ c |{ e r Опубликовано 15 Июня 2007 Жалоба Поделиться Опубликовано 15 Июня 2007 Доделал мод регистрации и авторизации.Теперь авторизация и выход происходит без использования форума.Также сделал регистрацию с кетпатчей.Выложил в файловый архив, остаётся только ждать, когда модераторы подтвердят. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.