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

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

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

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

#1 Пользователь офлайн   eltonjohn 

  • Группа: Участники
  • Сообщений: 9
  • Регистрация: 30 Июль 10

Отправлено 30 Июль 2010 - 14:17

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

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

0

#2 Пользователь офлайн   GiV 

  • IBR Team
  • Перейти к блогу
  • Группа: IBR Менеджмент
  • Сообщений: 5 290
  • Регистрация: 12 Июнь 03

Отправлено 30 Июль 2010 - 21:34

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

#3 Пользователь офлайн   LastDragon 

  • Группа: Клиенты
  • Сообщений: 413
  • Регистрация: 28 Апрель 08

Отправлено 31 Июль 2010 - 07:47

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

#4 Пользователь офлайн   eltonjohn 

  • Группа: Участники
  • Сообщений: 9
  • Регистрация: 30 Июль 10

Отправлено 31 Июль 2010 - 21:33

Просмотр сообщенияGiV (30 Июль 2010 - 21:34) писал:

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



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

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

0

#5 Пользователь офлайн   eltonjohn 

  • Группа: Участники
  • Сообщений: 9
  • Регистрация: 30 Июль 10

Отправлено 02 Август 2010 - 15:34

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

    <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

#6 Пользователь офлайн   GiV 

  • IBR Team
  • Перейти к блогу
  • Группа: IBR Менеджмент
  • Сообщений: 5 290
  • Регистрация: 12 Июнь 03

Отправлено 02 Август 2010 - 22:26

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

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


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

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


0

#7 Пользователь офлайн   APTMACTEP 

  • Группа: Клиенты
  • Сообщений: 12
  • Регистрация: 03 Май 10

Отправлено 02 Август 2010 - 22:34

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

#8 Пользователь офлайн   eltonjohn 

  • Группа: Участники
  • Сообщений: 9
  • Регистрация: 30 Июль 10

Отправлено 03 Август 2010 - 07:30

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

#9 Пользователь офлайн   eltonjohn 

  • Группа: Участники
  • Сообщений: 9
  • Регистрация: 30 Июль 10

Отправлено 03 Август 2010 - 12:38

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

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

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

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

Просмотр сообщенияAPTMACTEP (02 Август 2010 - 22:34) писал:

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


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

#10 Пользователь офлайн   GiV 

  • IBR Team
  • Перейти к блогу
  • Группа: IBR Менеджмент
  • Сообщений: 5 290
  • Регистрация: 12 Июнь 03

Отправлено 03 Август 2010 - 18:12

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

#11 Пользователь офлайн   eltonjohn 

  • Группа: Участники
  • Сообщений: 9
  • Регистрация: 30 Июль 10

Отправлено 03 Август 2010 - 21:12

Просмотр сообщенияGiV (03 Август 2010 - 18:12) писал:

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


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

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

#12 Пользователь офлайн   GiV 

  • IBR Team
  • Перейти к блогу
  • Группа: IBR Менеджмент
  • Сообщений: 5 290
  • Регистрация: 12 Июнь 03

Отправлено 04 Август 2010 - 12:44

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

#13 Пользователь офлайн   eltonjohn 

  • Группа: Участники
  • Сообщений: 9
  • Регистрация: 30 Июль 10

Отправлено 04 Август 2010 - 12:52

Просмотр сообщенияGiV (04 Август 2010 - 12:44) писал:

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


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

#14 Пользователь офлайн   GiV 

  • IBR Team
  • Перейти к блогу
  • Группа: IBR Менеджмент
  • Сообщений: 5 290
  • Регистрация: 12 Июнь 03

Отправлено 04 Август 2010 - 15:30

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

#15 Пользователь офлайн   eltonjohn 

  • Группа: Участники
  • Сообщений: 9
  • Регистрация: 30 Июль 10

Отправлено 04 Август 2010 - 23:53

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

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

0

#16 Пользователь офлайн   MikeSwan 

  • Группа: Участники
  • Сообщений: 1
  • Регистрация: 26 Август 10

Отправлено 27 Август 2010 - 23:45

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

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей