Перейти к контенту
  • 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

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

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

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

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

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

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

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

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

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

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