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

Помогите с внешней авторизацией форума IPB 3.0.x


Вопрос

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

Помогите мне пожалуйста с внешней авторизацией, очень нужно... Видела мод для этого IPB_SDK_3, который хвалят, но не понимаю как установить, чтобы работало ( и на формуе о нем ничего нет... объясните плиз для дураков любой способ создания авторизации такого типа

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

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

  • 0

Что сделать то надо. Внешняя авторизация понятие обобщенное.

 

 

Спасибо большое, что откликнулись на мой крик о помощи ). У меня есть сайт и установленная система лицензионного коммьюнити версии 3 ) на сайте у меня есть формочка авторизации... вот здесь предполагается, что пользователь вводит логин и пароль и авторизовывается не только на сайте, но и в коммьюнити автоматически ) Я не сильна в ООП и не понимаю, что где писать ) облазала интернет и не нашла ни одного нормального объяснения для дураков ))

Еще раз спасибо, что откликнулись )

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

  • 0

я сделала так:

 

   <form method="post" action="/community/index.php?app=core&module=global&section=login&do=process">
   <input type="hidden" name="act" value="1">
       <div class="label">Имя пользователя:</div>
       <div class="input"><input type="text" id="username" name="username" value="" /></div>
       <div class="label">Пароль:</div>
       <div class="input"><input type="password" id="password" name="password" value="" /></div>
       <div>
           <div class="submit"><input type="submit" value="Войти" /></div>
           <div class="register"><a href="/community/">регистрация</a></div>
           <div class="clr"></div>
       </div>
   </form>

 

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

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

  • 0

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

 

Вот вам класс, его необходимо положить в ./admin/api/member/ (директорию member нужно создать, если ее нет)

 

Использовать примерно так для входа

 


define( 'FORUM_PATH', '/var/www/sites/lvs/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/lvs/public_html/forums/');

require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' );

$ipbMemberLoginApi = new apiMemberLogin();
$ipbMemberLoginApi->init();
$ipbMemberLoginApi->logout();

unset($ipbMemberLoginApi);

 

Код вставлять естественно в том месте где обрабатывается логин и логаут на сайте.

Ну и пользователь должен быть в базе форума.

api_member_login.php

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

  • 0
GiV, огромное вам спасибо! Уверена, что Ваш скрипт поможет многим, кто столкнулся с такой проблемой :)
Ссылка на комментарий
Поделиться на других сайтах

  • 0

GiV, еще раз спасибо за код, установила его на сайте, замечательно логинится на форуме, но когда дело дошло до попадания в личный кабинет возникли проблемки:

 

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

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

 

2. Когда же я авторизуюсь через форму на сайте и проверяю, что у меня с куки, то ключ пользователя pass_hash содержит запись, а вот member_id равен нулю. Ну и ладно с ним, проверим по hash_id... залогиниваюсь на сайте и вижу что форма личного кабинета не загружается и нужные куки по нулям, перехожу на форум - я залогинена, возвращаюсь обратно на сайт, в куки прописался только pass_hash

 

Подскажите пожалуйста, в чем может быть проблема и как ее решить? в файле han_login явно видно что member_id прописывается в куки вместе с hash... почему при обращении к функции этого файла из другого класса не прописывается и получается такая бяка как в пункте 2?

 

Большое спасибо. Как раз сейчас занимаюсь подобной задачей, и Ваша помощь очень кстати :)

 

А у вас получилось сделать без проблем?

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

  • 0

Форум и сайт в одном домене?

Форум и сайт в одном домене, но на разных субдоменах?

 

Сайт и форум на одном домене, просто в разных папках:

 

сайт: www.site.ru

форум: www.site.ru/community/

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

  • 0

а в настройках кук на форуме ничего страшного не навернуто?

 

я в настройках кук на форуме вообще ничего не делала, все поля пустые )

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

  • 0

Поместила название домена в админке (настройки куки), после этого:

 

Array ( [member_id] => 0 [pass_hash] => 0 [anonlogin] => -1 [session_id] => daf6ab0b25ac59e5609b6bd355844be3 [coppa] => 0 [itemMarking_forums] => eJxLtDK0qi62MrNSSi9KLU4tUbJOBIlkWplaZ1oZGlkYWJoaWpiZWtfWAlwwDTYMIQ,, )

 

ни на сайте, ни на форуме не логинится... я это уже пробовала ((

сняла и :( теперь даже то, что работало... не работает (

 

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

 

может это у меня только такие проблемы...

 

В общем пока я решила эту проблему так:

 

на сайте обработчик формы отправляем форуму

 

<form method="post" action="/community/index.php?app=core&module=global&section=login&do=process">
   <input type="hidden" name="act" value="1">
       <div class="label">Имя пользователя:</div>
       <div class="input"><input type="text" id="username" name="username" value="" /></div>
       <div class="label">Пароль:</div>
       <div class="input"><input type="password" id="password" name="password" value="" /></div>
       <div>
           <div class="submit"><input type="submit" value="Войти" /></div>
           <div class="register"><a href="/community/">регистрация</a></div>
           <div class="clr"></div>
       </div>
   </form>

 

Теперь нам нужно найти место, которое перенаправляет форму "Подождите, сейчас вы будете перенаправлены" не на главную страницу форума, а на страницу сайта, для этого:

 

Идем в админ-центр, там идем во Внешний вид

выбираем IpBoard

и теперь нам нужен шаблон redirectTemplate во вкладке "Прочие"

 

открываем шаблончик

 

и в этом куске кода меняем все url на то, что нам нужно, т.е. у меня так(привожу кусок кода, находится внизу шаблона):

 

<script type='text/javascript'>
	//<![CDATA[
	// Fix Mozilla bug: 209020
	if ( navigator.product == 'Gecko' )
	{
		navstring = navigator.userAgent.toLowerCase();
		geckonum  = navstring.replace( /.*gecko\/(\d+)/, "$1" );
		setTimeout("moz_redirect()",1500);
	}
	function moz_redirect()
	{
		<if test="redirectmozfull:|:$full==true">
			var url_bit     = "{parse url="/" base="none"}";
		<else />
			var url_bit     = "{parse url="/" base="public"}";
		</if>
		window.location = url_bit.replace( new RegExp( "&", "g" ) , '&' );
	}
	//>
	</script>
</head>
<body  id='ipboard_body' class='redirector'>
	<div id='ipbwrapper'>
		<h1>{$this->settings['site_name']}</h1>
		<h2>{$this->lang->words['thanks']}</h2>
		<p class='message'>
			<strong>{$text}</strong>
			<br /><br />
			{$this->lang->words['transfer_you']}
			<br />
			<span class='desc'>(<a href="<if test="redirectlink:|:$full==true">{parse url="{/}" base="none"}<else />{parse url="{/}" base="public"}</if>">{$this->lang->words['dont_wait']}</a>)</span>	
		</p>
	</div>
</body>

 

Обратите внимание на все parse url=, ставьте страницу, которая необходима вам )

 

Пусть мой способ не так элегантен, как способ GiV, но куки прописываются сразу, а переадресацию я вам показала

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

  • 0

Хотелось бы довести до логического конца методику предложенную GiV'ом.

Я добавил в предложенный класс функцию

public function getuserdata()
{
	$registry = ipsRegistry::instance();
               $registry->init();	
	return $this->registry->member()->fetchMemberData();
}

Далее схема такая. Открывается главная страница вызывается функция getuserdata. Она нам возвращает что пользователь гость. Смотрим куки - их нет. Далее авторизируемся, после чего направляемся на страницу где собственно вызывается $ipbMemberLoginApi->login($_POST['username'], $_POST['password']); Функция возвращает нам - Вы успешно опознаны системой. Далее редирект на главную страницу сайта (а не форума). Но она опять таки говорит, что вы гость. Смотрю куки - их нет.

И такая ерунда длится до тех пор пока хотя бы раз не зайти на форум. После этого все начинает работать и login и logout. Закрываем браузер. Открываем - и опять ниче не работает пока не зайдешь на форум хотя бы раз. Что нужно добавить чтобы авторизация проходила независимо заходили ли уже на форум или нет? ( у меня вообще ссылка на форум с главной страницы для гостей недоступна)

P.S. я так понимаю нужно вызвать функцию, которая "силами" форума создала правильные куки.

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

  • 0

Обращу внимание - если у вас стоит внешняя интеграция с сайтом, и метод $ipbMemberLoginApi->login вызывается для пользователя, существующего на сайте, но еще не созданного на форуме, все умрет с ошибкой, т.к. не дозагружен необходимый для создания пользователя класс. Решить проблему просто, добавить до строки:

        require_once( IPS_ROOT_PATH . 'sources/handlers/han_login.php' );

строку:

        require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );

 

При таком сценарии при входе на сайт для пользователя сразу же будет создаваться аккаунт на форуме, если он еще не создан :)

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

  • 0

Здравствуйте!

 

Воспользовался классом GiV'a, все работает нормально кроме авторизации русских ников. Пожалуйста подскажите в чем проблема и как ее решить.

Спасибо!

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

  • 0

Пробовал и в UTF-8 подавать скрипту данные, не помогает. Все так же латинские и циферные аккаунты проходят авторизацию на сайте и автоматически на форуме, но русские ни в какую (ну т.е. на сайте все ок, но на форуме глухо, даже не создает новый аккаунт, если он еще не создан):

 

$ipbMemberLoginApi->login( iconv('cp1251', 'utf-8', $_POST['account']), iconv('cp1251', 'utf-8', $_POST['password']) );

 

У меня форум 3.1.2, подключен стандартный модуль внешней авторизации (внешняя БД юзеров). Кстати через него тоже русские ники не авторизовываются, причем даже созданные в админ-центре форума! Я пробовал отключать внешнюю авторизацию и оставлять внутреннюю, но все равно не помогает (Хотя русские аккаунты созданные через ацп начинают работать нормально. По всей видимости модуль содержит баг(ну это к моему вопросу не относится, просто на заметку.)).

 

Помогите пожалуйста, тут явно где-то в форумных скриптах парсер не пропускает.

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

  • 0
Скажите, а вы свой класс проверяли на работоспособность с русскими никами? Я хочу выяснить это конкретная проблема моей сборки форума или проблема в апи была и раньше.
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Так как никто не помог, решил собственными силами найти решение. В общем проблема была в методе проверки пары имя-пароль класса внешней авторизации. Пароль приходил в кодировке UTF-8, нужно было в CP1251 (Т.е. русскими словами из базы брался пароль в utf-8 и сравнивался с введенным в поле формы авторизации cp1251). Кстати это баг который не закрыт по крайней мере в версии 3.1.2, и все кто используют авторизацию через удаленную БД с юзерами могли заметить, что юзеры использующие пароль в котором есть кириллические символы не могут авторизоваться на форуме.

 

ЗЫ: База юзеров и база форума у меня в кодировке UTF-8.

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

  • 0
а теперь представим, что во внешней базе все в UTF-8, в этом случае "баг" уже будет из-за подобного исправления.
Ссылка на комментарий
Поделиться на других сайтах

  • 0
а теперь представим, что во внешней базе все в UTF-8, в этом случае "баг" уже будет из-за подобного исправления.

 

Если вы внимательно читали мой пост, внешняя база была как раз в UTF-8

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

  • 0

Рекомендация тут только одна - привести все к одному знаменателю (одной кодировке).

А пока есть зоопарк - страницы сайта в cp1251, базы в utf8, форумы в utf8, проблемы у вас будут, я гарантирую.

 

Если вы внимательно читали мой пост, внешняя база была как раз в UTF-8

Я внимательно читал решение в КЦ.

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

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

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

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

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