Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
rad1k

Как вывисти авторизацию на другие страницы сайта

Recommended Posts

Как вывести блок авторизации на другие страницы сайта. К примеру чтобы когда человек заходил на главную он видел вход или регистрацию, а если он зарегистрирован то отображается его профиль, тоже на всех страницах сайта.

Share this post


Link to post
Share on other sites

Положите такое содержимое как файл /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

  • Upvote 3

Share this post


Link to post
Share on other sites

А для версии 2.2.2 можно это адаптировать?

Или это совсем устаревшая версия и непременно надо на 3 переходить?

Share this post


Link to post
Share on other sites

А для версии 2.2.2 можно это адаптировать?

Нет

 

Или это совсем устаревшая версия и непременно надо на 3 переходить?

Для 2.2 есть свои решения, только их надо искать. А перейти как минимум на 2.3.6 стоит.

Share this post


Link to post
Share on other sites
Положите такое содержимое как файл /admin/api/member/api_member_login.php

Куда положить то?

 

Насчёт остальных 3 кусков. С ними то что делать? куда пихать?

 

Не уверен, что авторизация будет работать с 3.1.3+.

 

post-44033-0-93787600-1308857443_thumb.jpg

 

Вам не кажется, что тут нет папки member и соответственно вся цепочка к файлу api_member_login.php рушится. Где он лежит у 3.1.4?

Share this post


Link to post
Share on other sites

Теперь на вашем сайте вы можете выводить информацию:

Авторизовывать пользователей:

И деавторизовывать:

А куда это всё прописать?

Share this post


Link to post
Share on other sites

Вам не кажется, что тут нет папки member и соответственно вся цепочка к файлу api_member_login.php рушится.

Так создайте.

 

А куда это всё прописать?

В собственных php-скриптах вашей CMS, наверное? Если вам нужно какое-то готовое решение - смотрите в сторону пакетов по типу ipbwi или ip.converge. А это так, снипеты для php-разработчиков :)

Share this post


Link to post
Share on other sites

А это так, снипеты для php-разработчиков

А собственно это и нужно :)

 

На саб-домене есть форум на ipb 1.3. Хотелось чтоб была авторизация с основного форума на саб-домен :)

 

Просто никогда с таким не сталкивался (не было нужды в этом) поэтому туплю :)

Share this post


Link to post
Share on other sites

Первый файл создал. Локалка, денвер.

 

Вот мой первый кусок:

<?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);
?>    

Вставив его - блок пустой... Что не так?

Edited by proFox

Share this post


Link to post
Share on other sites

'/forum/'

Это путь? А не имя диска:/home/и так далее

Share this post


Link to post
Share on other sites

Изменений ноль:

 

<?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);
?>       

Share this post


Link to post
Share on other sites

Он подключается, точно. Но не доводит что-то... У меня после блока авторизации есть и ещё блоки, но сам блок пустой, сужен, а остальные исчезли...

Share this post


Link to post
Share on other sites

Блин, помогите. Эти три куска что тупо в блок нужно всунуть? Я сделал так, вот код целиком моего блока:

 

<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>

 

Или этот пхп код нужно использовать как обработчик формы авторизации. Тут нет ничего, где инструкция?

Share this post


Link to post
Share on other sites

Эти три куска что тупо в блок нужно всунуть?

тупо не надо

 

Я сделал так, вот код целиком моего блока:

а блог сам по себе?

 

Тут нет ничего, где инструкция?

Что бы стать писателем, вначале надо изучить азбуку. Здесь аналогично.

 

На саб-домене есть форум на ipb 1.3. Хотелось чтоб была авторизация с основного форума на саб-домен

Скорее всего данное решение не пойдет. Про 1.3 нечего не скажу. :(

Share this post


Link to post
Share on other sites
Блин, помогите. Эти три куска что тупо в блок нужно всунуть?

Да, и так же будет работать.

 

Тут нет ничего, где инструкция?

Какая инструкция, это расширенный класс базового 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);
?>

  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...