rad1k 0 11/20/10 13:57 Как вывести блок авторизации на другие страницы сайта. К примеру чтобы когда человек заходил на главную он видел вход или регистрацию, а если он зарегистрирован то отображается его профиль, тоже на всех страницах сайта. Поделиться сообщением Ссылка на сообщение
Ritsuka 540 11/21/10 08:12 Положите такое содержимое как файл /admin/api/member/api_member_login.php: <?php /** * IBResource, LTD; Ritsuka, UnLTD * IP.Board * Member authorization API file * * @author GiV, Ritsuka * @copyright (c) 2010 IBResource, LTD. * @link http://www.ibresource.ru * @version 1.0.0 * */ if ( ! class_exists( 'apiCore' ) ) { require_once( FORUM_PATH . 'admin/api/api_core.php' ); } class apiMemberLogin extends apiCore { private $_handler = NULL; public $path_to_ipb = FORUM_PATH; public function childInit() { require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' ); require_once( IPS_ROOT_PATH . 'sources/handlers/han_login.php' ); $this->_handler = new han_login( $this->registry ); $this->_handler->init(); } public function login( $username, $password, $remember = TRUE ) { $this->request['username'] = $username; $this->request['password'] = $password; $this->request['rememberMe'] = $remember; return $this->_handler->verifyLogin(); } public function logout() { IPSCookie::set( "member_id" , "0" ); IPSCookie::set( "pass_hash" , "0" ); IPSCookie::set( "anonlogin" , "-1" ); if( is_array( $_COOKIE ) ) { foreach( $_COOKIE as $cookie => $value) { if ( stripos( $cookie, $this->settings['cookie_id'] . 'ipbforumpass' ) !== false ) { IPSCookie::set( $cookie, '-', -1 ); } } } $this->registry->member()->sessionClass()->convertMemberToGuest(); return true; } public function getMember() { return $this->registry->member()->fetchMemberData(); } } Теперь на вашем сайте вы можете выводить информацию: define( 'FORUM_PATH', '/var/www/sites/public_html/forums/'); require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' ); $ipbMemberLoginApi = new apiMemberLogin(); $ipbMemberLoginApi->init(); $member = $ipbMemberLoginApi->getMember(); if($member['member_id']) { echo $member['name']; } unset($ipbMemberLoginApi); Авторизовывать пользователей: define( 'FORUM_PATH', '/var/www/sites/public_html/forums/'); require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' ); $ipbMemberLoginApi = new apiMemberLogin(); $ipbMemberLoginApi->init(); $ipbMemberLoginApi->login( 'user_login', 'user_password' ); unset($ipbMemberLoginApi); И деавторизовывать: define( 'FORUM_PATH', '/var/www/sites/public_html/forums/'); require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' ); $ipbMemberLoginApi = new apiMemberLogin(); $ipbMemberLoginApi->init(); $ipbMemberLoginApi->logout(); unset($ipbMemberLoginApi); Не уверен, что авторизация будет работать с 3.1.3+. Оригинальный скрипт (без инфо о пользователе) тут: http://forums.ibresource.ru/index.php?/topic/61133/page__view__findpost__p__370875 3 Поделиться сообщением Ссылка на сообщение
Bard 0 01/17/11 13:12 А для версии 2.2.2 можно это адаптировать?Или это совсем устаревшая версия и непременно надо на 3 переходить? Поделиться сообщением Ссылка на сообщение
Ph-A 395 01/17/11 14:20 А для версии 2.2.2 можно это адаптировать?Нет Или это совсем устаревшая версия и непременно надо на 3 переходить?Для 2.2 есть свои решения, только их надо искать. А перейти как минимум на 2.3.6 стоит. Поделиться сообщением Ссылка на сообщение
proFox 0 06/23/11 19:32 Положите такое содержимое как файл /admin/api/member/api_member_login.phpКуда положить то? Насчёт остальных 3 кусков. С ними то что делать? куда пихать? Не уверен, что авторизация будет работать с 3.1.3+. Вам не кажется, что тут нет папки member и соответственно вся цепочка к файлу api_member_login.php рушится. Где он лежит у 3.1.4? Поделиться сообщением Ссылка на сообщение
Trotor 27 06/24/11 00:17 Теперь на вашем сайте вы можете выводить информацию:Авторизовывать пользователей:И деавторизовывать:А куда это всё прописать? Поделиться сообщением Ссылка на сообщение
Ritsuka 540 06/24/11 05:07 Вам не кажется, что тут нет папки member и соответственно вся цепочка к файлу api_member_login.php рушится.Так создайте. А куда это всё прописать? В собственных php-скриптах вашей CMS, наверное? Если вам нужно какое-то готовое решение - смотрите в сторону пакетов по типу ipbwi или ip.converge. А это так, снипеты для php-разработчиков :) Поделиться сообщением Ссылка на сообщение
Trotor 27 06/24/11 11:58 А это так, снипеты для php-разработчиковА собственно это и нужно :) На саб-домене есть форум на ipb 1.3. Хотелось чтоб была авторизация с основного форума на саб-домен :) Просто никогда с таким не сталкивался (не было нужды в этом) поэтому туплю :) Поделиться сообщением Ссылка на сообщение
proFox 0 06/24/11 13:41 (изменено) Первый файл создал. Локалка, денвер. Вот мой первый кусок:<?php define( 'FORUM_PATH', '/forum/'); require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' ); $ipbMemberLoginApi = new apiMemberLogin(); $ipbMemberLoginApi->init(); $member = $ipbMemberLoginApi->getMember(); if($member['member_id']) { echo $member['name']; } unset($ipbMemberLoginApi); ?> Вставив его - блок пустой... Что не так? Изменено 24 июня 2011 пользователем proFox Поделиться сообщением Ссылка на сообщение
Ph-A 395 06/24/11 14:01 '/forum/'Это путь? А не имя диска:/home/и так далее Поделиться сообщением Ссылка на сообщение
proFox 0 06/24/11 14:42 Изменений ноль: <?php define( 'FORUM_PATH', 'Z:/home/league1.ru/www/forum/'); require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' ); $ipbMemberLoginApi = new apiMemberLogin(); $ipbMemberLoginApi->init(); $member = $ipbMemberLoginApi->getMember(); if($member['member_id']) { echo $member['name']; } unset($ipbMemberLoginApi); ?> Поделиться сообщением Ссылка на сообщение
proFox 0 06/24/11 17:08 Он подключается, точно. Но не доводит что-то... У меня после блока авторизации есть и ещё блоки, но сам блок пустой, сужен, а остальные исчезли... Поделиться сообщением Ссылка на сообщение
proFox 0 06/24/11 19:56 Блин, помогите. Эти три куска что тупо в блок нужно всунуть? Я сделал так, вот код целиком моего блока: <div class="portlet"> <div class="portlet-header">Мини-профиль</div> <div class="portlet-content"> <?php define( 'FORUM_PATH', 'Z:/home/league1.ru/www/forum/'); require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' ); $ipbMemberLoginApi = new apiMemberLogin(); $ipbMemberLoginApi->init(); $member = $ipbMemberLoginApi->getMember(); if($member['member_id']) { echo $member['name']; } unset($ipbMemberLoginApi); $ipbMemberLoginApi->login( 'user_login', 'user_password' ); unset($ipbMemberLoginApi); $ipbMemberLoginApi->logout(); unset($ipbMemberLoginApi); ?> </div> </div> Или этот пхп код нужно использовать как обработчик формы авторизации. Тут нет ничего, где инструкция? Поделиться сообщением Ссылка на сообщение
Ph-A 395 06/25/11 10:13 Эти три куска что тупо в блок нужно всунуть?тупо не надо Я сделал так, вот код целиком моего блока:а блог сам по себе? Тут нет ничего, где инструкция? Что бы стать писателем, вначале надо изучить азбуку. Здесь аналогично. На саб-домене есть форум на ipb 1.3. Хотелось чтоб была авторизация с основного форума на саб-домен Скорее всего данное решение не пойдет. Про 1.3 нечего не скажу. :( Поделиться сообщением Ссылка на сообщение
siv1987 2628 06/25/11 14:13 Блин, помогите. Эти три куска что тупо в блок нужно всунуть?Да, и так же будет работать. Тут нет ничего, где инструкция?Какая инструкция, это расширенный класс базового apiCore с несколькими методами, из которых - login -авторизация, logout -выход, getMember -массив пользователя, ну и инициализации контроллера и файла авторизации. Это можно было понять по одному взгляду на класс и его примеров. Если вы здесь видите только разбросанные куски кода то не стоит даже браться. Даже я, не писавший в своей жизни ничего сложнее чем мод sitemap, смог наваять за двадцать минут вот такой простой скрипт <?php //header('Content-type: text/html; charset=utf-8'); define( 'FORUM_PATH', $_SERVER['DOCUMENT_ROOT'].'/forum31/'); require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' ); $apiMember = new apiMemberLogin(); $apiMember->init(); /* Авторизация */ if( $_POST['login'] && $_POST['password'] ) { $login = $_POST['login']; $password = $_POST['password']; $ret = $apiMember->login( $login, $password ); if( $ret[2] ) { if( $ret[2] == 'wrong_auth' ) { echo 'Неверный логин или пароль<br>'; } else { echo 'Ошибка авторизации: {$ret[2]}<br>'; } } else { echo '<html><head><meta http-equiv="refresh" content="2;url=index.php"></head><body>Вы вошли в систему!</body><html>'; exit; } } /* Выход */ if( $_GET['do'] == 'logout' ) { $apiMember->logout(); echo '<html><head><meta http-equiv="refresh" content="2;url=index.php"></head><body>Выход из системы</body><html>'; exit; } $member = $apiMember->getMember(); if($member['member_id']) { //print_r( $member ); echo 'Вы залогены как '.$member['name'].' <a href="index.php?do=logout">Выход</a><br />'; } else { echo 'Вы не авторизированы<br /> <form name="form_login" action="index.php?do=login" method="post"> <input name="login" type="text"><br /> <input name="password" type="password"><br /> <input type="submit" value="Отправить"> </form> '; } unset($apiMember); ?> 1 Поделиться сообщением Ссылка на сообщение