.silent Опубликовано 17 Февраля 2006 Жалоба Поделиться Опубликовано 17 Февраля 2006 (изменено) Как-то столкнулся с авторизацией на форуме извне, прочитал статью в документации на сайте и не шибко все понял.Потом разобрался и оказалось все не так сложно. Для авторизации нам нужно использовать такой запрос:SELECT m.id, m.name, m.members_display_name, mc.converge_email, mc.converge_pass_hash, mc.converge_pass_salt FROM ibf_members m JOIN ibf_members_converge mc ON (m.email = mc.converge_email) WHERE m.id = [id_пользователя] LIMIT 0, 1если выборка идет по имени пользователя, то надо заменить блок WHERE наWHERE m.name = [имя_пользователя]Примечание: JOIN с ibf_members_converage идет не по id, по e-mail'у. это так, на будущее... интересуют нас поля converge_pass_salt и converge_pass_hash, в них все и хранится. а принцип сверки пароля такой:md5( md5( converge_pass_salt ).md5( пароль_на_вводе ) ) == converge_pass_hash если true то все хорошо, false — не прошло вот и все Изменено 27 Мая 2006 пользователем .silent Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 18 Февраля 2006 Жалоба Поделиться Опубликовано 18 Февраля 2006 WHERE m.name = [имя_пользователя]вот за такие советы надо просто руки оторвать.Вот так ведь и напишут:m.name={$_GET['name']} Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 20 Февраля 2006 Жалоба Поделиться Опубликовано 20 Февраля 2006 Ммм... А кто проще сможет? <?php require_once( './sources/api/api_core.php' ); $api = new api_core( ); $api->api_init( ); require_once( ROOT_PATH.'sources/handlers/han_login.php' ); $login = new han_login(); $login->ipsclass =& $api->ipsclass; $login->init(); /* * Some checks for input data * * Password, Login * * NEED TO BE PLACED HERE! */ // var $password contained plain-text password (not hash)! $login->login_authenticate( $username, $password ); // check rest.. $member = $login->member; //member's data if ( ( ! $member['id'] ) or ( $login->return_code == 'NO_USER' ) ) { // Ohh! Couldn't login. Some shit with user name. die( 'Hey! No user found' ); } if ( $login->return_code != 'SUCCESS' ) { // Ohh! Couldn't login. Some shit happened. May be it's wrong password? die( 'Password wrong!'); } die( 'Hi, dude!'); ?> Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 20 Февраля 2006 Жалоба Поделиться Опубликовано 20 Февраля 2006 Ваня, в твоём случае нужен дополнительный модуль.А в варианте автора - только драйвер. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 20 Февраля 2006 Жалоба Поделиться Опубликовано 20 Февраля 2006 Миша, какой? Все эти файлы входят в состав версии 2.1.х. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 21 Февраля 2006 Жалоба Поделиться Опубликовано 21 Февраля 2006 han_loginapi_core согласен, в принципе они будут в любом случае Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Vic'er Опубликовано 21 Февраля 2006 Жалоба Поделиться Опубликовано 21 Февраля 2006 WHERE m.name = [имя_пользователя]вот за такие советы надо просто руки оторвать.Вот так ведь и напишут:m.name={$_GET['name']}Song, ты не прав! Автор лишь показал методу (простенькую, но все же), а если пользователь сделает так m.name={$_GET['name']} то это чисто его проблемы, проблемы его рук и головы. Вот к примеру, если человек порезался там, или еще что-то, то ему советуют наложить повязку, и если чел настолько глупый, чтобы накладывать повязку из половой тряпки, то его только могила исправит Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
.silent Опубликовано 21 Февраля 2006 Автор Жалоба Поделиться Опубликовано 21 Февраля 2006 могли бы сначала показать тему, а потом обсуждать.а то уже всё обсудили =/ Ммм... А кто проще сможет?а у кого быстрее отработает? Song, руки отрывать мне не надо. не нравится - не еште.можете и топик удалить. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 21 Февраля 2006 Жалоба Поделиться Опубликовано 21 Февраля 2006 а у кого быстрее отработает?если всего один запрос и проверка то конечно же Ваше решение. НО! Ваше решение не поддерживает механизмов аутентификации предложенных в IPB (internal/external/LDAP etc). Более того в моем решение девелоперу совершенно не надо заморачиваться со структурой таблиц в БД, это решение буедт работоспособно при любых изменениях в структуре БД новых версий. А Ваше решение к сожалению придется переписывать, случись чего, согласитесь, это скучно -- программисты ленивые люди. Так что скорость работы Вашего решения в данном случае это экономия на спичках. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
.silent Опубликовано 21 Февраля 2006 Автор Жалоба Поделиться Опубликовано 21 Февраля 2006 хорошо. но для себя я лучше сделаю так чтобы работало побыстрее и перепишу если что Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 21 Февраля 2006 Жалоба Поделиться Опубликовано 21 Февраля 2006 Ваше право =) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 21 Февраля 2006 Жалоба Поделиться Опубликовано 21 Февраля 2006 Song, ты не прав! Автор лишь показал методу (простенькую, но все же), а если пользователь сделает такVicer, этот топик - информационный. Правильно?Ибо расположен он ни где-нибудь во флейме, а в разделе где присутсвует информация из проверенных источников о том как именно делать. Поэтому логично думать, что здесь всё должно быть именно так как написано. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 21 Февраля 2006 Жалоба Поделиться Опубликовано 21 Февраля 2006 Song, ты не прав! Автор лишь показал методу (простенькую, но все же), а если пользователь сделает такVicer, этот топик - информационный. Правильно?Ибо расположен он ни где-нибудь во флейме, а в разделе где присутсвует информация из проверенных источников о том как именно делать. Поэтому логично думать, что здесь всё должно быть именно так как написано.ну в таком случае в топике отсутствует код как таковой. Скажем так, это не претендует на готовое решение пока тут не будет рабочего кода, а пока это можно рассматривать как рассказ о схеме авторизации в теории. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
.silent Опубликовано 21 Февраля 2006 Автор Жалоба Поделиться Опубликовано 21 Февраля 2006 Song, юзер сохранит скрипт GiV'а и запустит его, потом скажет что нихрена не работает, да? пошел такой пользователь к чертям. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 21 Февраля 2006 Жалоба Поделиться Опубликовано 21 Февраля 2006 А что это мысль, счас напишем. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
.silent Опубликовано 21 Февраля 2006 Автор Жалоба Поделиться Опубликовано 21 Февраля 2006 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Тестирование авторизации</title> </head> <style> html {overflow-x: auto; width:100%; height:100%; } body {font-family: Tahoma; font-size: 8pt; margin: 5px; height:100%; background-color: #E2E8E7; } form {display: inline; margin: 0; padding: 0; } input, select, textarea {margin: 0; padding: 0; font-family: Tahoma; font-size: 8pt; } </style> <body> <form method='post' action='login.php'"> <input type='text' name='UserName' value='' size='30' /> <input type='password' name='PassWord' size='30' /><br /> <br /> <input type='submit' value='проверить пользователя' /> </form> <br /> <br /> <? define( 'ROOT_PATH' , "./" ); require_once( ROOT_PATH.'sources/api/api_core.php' ); $api = new api_core( ); $api-> load_classes = array( 'forums' => 1, 'converge' => 1); // грузимся чуть быстрее чем по-умолчанию $api->api_init( ); require_once( ROOT_PATH.'sources/handlers/han_login.php' ); $login = new han_login(); $login->ipsclass =& $api->ipsclass; $login->init(); $userName = $api->ipsclass->input['UserName']; $password = $api->ipsclass->input['PassWord']; if ( isset( $userName ) ) { $success = true; $login->login_authenticate( $userName, $password ); $member = $login->member; if ( ( ! $member['id'] ) or ( $login->return_code == 'NO_USER' ) ) { echo( 'Пользователь не найден' ); $success = false; } if ( $success and $login->return_code != 'SUCCESS' ) { echo( 'Пароль не верен!'); $success = false; } if ( $success ) echo( 'Успешная авторизация' ); } ?> </body> Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
SiDChik Опубликовано 9 Апреля 2006 Жалоба Поделиться Опубликовано 9 Апреля 2006 Хм два вопроса: 1. Как сделать чтобы он действительно вошёл в систему. Т.е. сайт использовал систему авторизации сайта. Пока вижу выход переотправлять пользователя на index.php?act=login или отправлять форму в скрипт. Но хотелось бы чтобы выполнив вход, посетителя не кидало на форум, а обратно, хотябы на главную страницу сайта. 2.Вопрос сегодня же решил Вот код скрипта, переделанного require "Url/to/forum/"."init.php"; //вместо Url/to/forum/ ставим относительный путь к папке с форумом require ROOT_PATH."ips_kernel/class_db_mysql.php"; require ROOT_PATH."conf_global.php"; require_once ROOT_PATH."sources/ipsclass.php"; require_once ROOT_PATH."sources/classes/class_session.php"; $ipsclass = new ipsclass(); $ipsclass->vars = $INFO; $ipsclass->init_db_connection(); $ipsclass->sess = new session(); $ipsclass->sess->ipsclass =& $ipsclass; $ipsclass->member = $ipsclass->sess->authorise(); $ipsclass->my_session = $ipsclass->sess->session_id; // Used in code После этих действий доступно $ipsclass->members и можно без проблем узнать, выполнил человек вход или нет. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 11 Апреля 2006 Жалоба Поделиться Опубликовано 11 Апреля 2006 Для логина есть хороший параметр return.В login.php if ( $this->ipsclass->input['return'] != "" ) { $return = urldecode($this->ipsclass->input['return']); if ( preg_match( "#^http://#", $return ) ) { $this->ipsclass->boink_it($return); } }собственно... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Ice_sCream Опубликовано 6 Октября 2006 Жалоба Поделиться Опубликовано 6 Октября 2006 Ну а как установить Куки, чтобы пользователь не только проверился, существует ли он, а полностью авторизовался на форуме? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
SiDChik Опубликовано 30 Октября 2006 Жалоба Поделиться Опубликовано 30 Октября 2006 Ну а как установить Куки, чтобы пользователь не только проверился, существует ли он, а полностью авторизовался на форуме?Посмотри мой пример, вполне рабочий. Отправляй форму входа на скрипт аутентификации, там пропиши редирект и всё будет работать. P.S. Я егно доработал, так что работает а автовход и т.д..... куки создаются.... require "forum/"."init.php"; //вместо Url/to/forum/ ставим относительный путь к папке с форумом require ROOT_PATH."ips_kernel/class_db_mysql.php"; require ROOT_PATH."conf_global.php"; require_once ROOT_PATH."sources/ipsclass.php"; require_once ROOT_PATH."sources/classes/class_session.php"; $ipsclass = new ipsclass(); $ipsclass->vars = $INFO; $ipsclass->init_db_connection(); $ipsclass->sess = new session(); $ipsclass->sess->ipsclass =& $ipsclass; $ipsclass->init_load_cache(); $ipsclass->initiate_ipsclass(); $ipsclass->member = $ipsclass->sess->authorise(); $ipsclass->my_session = $ipsclass->sess->session_id; Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
ddvhouse Опубликовано 9 Ноября 2006 Жалоба Поделиться Опубликовано 9 Ноября 2006 Ну а как установить Куки, чтобы пользователь не только проверился, существует ли он, а полностью авторизовался на форуме?Посмотри мой пример, вполне рабочий. Отправляй форму входа на скрипт аутентификации, там пропиши редирект и всё будет работать. P.S. Я егно доработал, так что работает а автовход и т.д..... куки создаются.... require "forum/"."init.php"; //вместо Url/to/forum/ ставим относительный путь к папке с форумом require ROOT_PATH."ips_kernel/class_db_mysql.php"; require ROOT_PATH."conf_global.php"; require_once ROOT_PATH."sources/ipsclass.php"; require_once ROOT_PATH."sources/classes/class_session.php"; $ipsclass = new ipsclass(); $ipsclass->vars = $INFO; $ipsclass->init_db_connection(); $ipsclass->sess = new session(); $ipsclass->sess->ipsclass =& $ipsclass; $ipsclass->init_load_cache(); $ipsclass->initiate_ipsclass(); $ipsclass->member = $ipsclass->sess->authorise(); $ipsclass->my_session = $ipsclass->sess->session_id; А куда этот куд вставляется.Код .silent использую. Вижу, что "залогинился". Но на форуме то ничего не происходит.Как я понимаю, код выше как раз и должен эту функцию выполнять? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
SiDChik Опубликовано 13 Ноября 2006 Жалоба Поделиться Опубликовано 13 Ноября 2006 Да.. Я у себя делаю так: Пишу блок инициализации init.php, где расположен данный код. Потом скажем index.php выглядит так:<? include('init.php'); /* тело index.php */ ?> Единственное, дабы исключить повторные подключения к базе данных тебе надо будет использовать класс базы форума(кстати вполне удобно) Если тебя это не устраивает, то ты можешь сделать следующее: Если нужно выцепить сессию, подключаешь как выше описано, форум, делаешь дамп необходимой информации в свою базу, (при этом создаются соответсвующие кукисы), затем уже своим скриптом, согласном кукам, из своей базы выдираешь сессию, либо указатель на нужную таблицу, смотря как сделаешь дамп... Good Luck! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
ddvhouse Опубликовано 13 Ноября 2006 Жалоба Поделиться Опубликовано 13 Ноября 2006 Написал такой myinit.php (лежит в папке форума):<? require "init.php"; require ROOT_PATH."ips_kernel/class_db_mysql.php"; require ROOT_PATH."conf_global.php"; require_once ROOT_PATH."sources/ipsclass.php"; require_once ROOT_PATH."sources/classes/class_session.php"; $ipsclass = new ipsclass(); $ipsclass->vars = $INFO; $ipsclass->init_db_connection(); $ipsclass->sess = new session(); $ipsclass->sess->ipsclass =& $ipsclass; $ipsclass->init_load_cache(); $ipsclass->initiate_ipsclass(); $ipsclass->member = $ipsclass->sess->authorise(); $ipsclass->my_session = $ipsclass->sess->session_id; ?> Файл login.php (тоже лежит в папке форума):<? include('myinit.php'); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Тестирование авторизации</title> </head> <style> html {overflow-x: auto; width:100%; height:100%; } body {font-family: Tahoma; font-size: 8pt; margin: 5px; height:100%; background-color: #E2E8E7; } form {display: inline; margin: 0; padding: 0; } input, select, textarea {margin: 0; padding: 0; font-family: Tahoma; font-size: 8pt; } </style> <body> <form method='post' action='login.php'"> <input type='text' name='UserName' value='' size='30' /> <input type='password' name='PassWord' size='30' /><br /> <br /> <input type='submit' value='проверить пользователя' /> </form> <br /> <br /> <? define( 'ROOT_PATH' , "./" ); require_once( ROOT_PATH.'sources/api/api_core.php' ); $api = new api_core( ); $api-> load_classes = array( 'forums' => 1, 'converge' => 1); // грузимся чуть быстрее чем по-умолчанию $api->api_init( ); require_once( ROOT_PATH.'sources/handlers/han_login.php' ); $login = new han_login(); $login->ipsclass =& $api->ipsclass; $login->init(); $userName = $api->ipsclass->input['UserName']; $password = $api->ipsclass->input['PassWord']; if ( isset( $userName ) ) { $success = true; $login->login_authenticate( $userName, $password ); $member = $login->member; if ( ( ! $member['id'] ) or ( $login->return_code == 'NO_USER' ) ) { echo( 'Пользователь не найден' ); $success = false; } if ( $success and $login->return_code != 'SUCCESS' ) { echo( 'Пароль не верен!'); $success = false; } if ( $success ) echo( 'Успешная авторизация' ); } ?> </body> В результате запуска login.php:Notice: Use of undefined constant IPB_THIS_SCRIPT - assumed 'IPB_THIS_SCRIPT' in \init.php on line 56Fatal error: Call to a member function on a non-object in \sources\handlers\han_login.php on line 62 Без include('myinit.php'); этих предупреждения и ошибки нет.Авторизация тоже не работает.Что не так нписал? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
SiDChik Опубликовано 13 Ноября 2006 Жалоба Поделиться Опубликовано 13 Ноября 2006 дело в том что, учитывая, что ты соединил два примера, то PHP ругается на то, что классы объявляются несколько раз вроде как... Завтра выложу архив, разберешься. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
ddvhouse Опубликовано 13 Ноября 2006 Жалоба Поделиться Опубликовано 13 Ноября 2006 Завтра выложу архив, разберешься. Спасибо, жду. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.