Перейти к содержимому


Фотография

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

Форумы IBResource

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 35
eltonjohn
  • Участники
  • Cообщений: 9
  • Город:Москва

Отправлено

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

Сообщение отредактировал eltonjohn: 30 Июль 2010 - 14:18


GiV
  • Участники
  • Cообщений: 5 513
  • http://www.wtf.sh/
  • Город:да

Отправлено

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

LastDragon
  • Участники
  • Cообщений: 456
  • http://ipbnet.ru/

Отправлено

Возможно поможет
http://community.inv...ogin-modules-r7

eltonjohn
  • Участники
  • Cообщений: 9
  • Город:Москва

Отправлено

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



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

Сообщение отредактировал eltonjohn: 31 Июль 2010 - 21:44


eltonjohn
  • Участники
  • Cообщений: 9
  • Город:Москва

Отправлено

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

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

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

GiV
  • Участники
  • Cообщений: 5 513
  • http://www.wtf.sh/
  • Город:да

Отправлено

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

Вот вам класс, его необходимо положить в ./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);

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

Прикрепленные файлы



APTMACTEP
  • Клиенты
  • Cообщений: 14

Отправлено

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

eltonjohn
  • Участники
  • Cообщений: 9
  • Город:Москва

Отправлено

GiV, огромное вам спасибо! Уверена, что Ваш скрипт поможет многим, кто столкнулся с такой проблемой :)

eltonjohn
  • Участники
  • Cообщений: 9
  • Город:Москва

Отправлено

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

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

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

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

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


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

GiV
  • Участники
  • Cообщений: 5 513
  • http://www.wtf.sh/
  • Город:да

Отправлено

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

eltonjohn
  • Участники
  • Cообщений: 9
  • Город:Москва

Отправлено

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


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

сайт: www.site.ru
форум: www.site.ru/community/

GiV
  • Участники
  • Cообщений: 5 513
  • http://www.wtf.sh/
  • Город:да

Отправлено

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

eltonjohn
  • Участники
  • Cообщений: 9
  • Город:Москва

Отправлено

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


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

GiV
  • Участники
  • Cообщений: 5 513
  • http://www.wtf.sh/
  • Город:да

Отправлено

пропишите туда домен, хотя бы

eltonjohn
  • Участники
  • Cообщений: 9
  • Город:Москва

Отправлено

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

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( "&amp;", "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: 04 Август 2010 - 23:19


MikeSwan
  • Участники
  • Cообщений: 1

Отправлено

Хотелось бы довести до логического конца методику предложенную 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: 27 Август 2010 - 23:58


Ritsuka
  • Участники
  • Cообщений: 2 437

Отправлено

Обращу внимание - если у вас стоит внешняя интеграция с сайтом, и метод $ipbMemberLoginApi->login вызывается для пользователя, существующего на сайте, но еще не созданного на форуме, все умрет с ошибкой, т.к. не дозагружен необходимый для создания пользователя класс. Решить проблему просто, добавить до строки:
require_once( IPS_ROOT_PATH . 'sources/handlers/han_login.php' );
строку:
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );

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

Сообщение отредактировал Ritsuka: 24 Сентябрь 2010 - 19:44


kolger
  • Участники
  • Cообщений: 8

Отправлено

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

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

GiV
  • Участники
  • Cообщений: 5 513
  • http://www.wtf.sh/
  • Город:да

Отправлено

Возможно ники не в UTF-8

kolger
  • Участники
  • Cообщений: 8

Отправлено

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

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

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

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




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных