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

Кросс регистрация в IPB

Recommended Posts

Доброго времени суток всем,

 

Возникла необходимость сделать кросс регистрацию/вход/удаление пользователей между двумя сайтами. С одной из CMS я знаком очень хорошо, но вот приходится первый раз работать с IPBoard. Собственно вопрос: Каким образом данный функционал можно реализовать проще всего? Я поискал решение данной проблемы в инете и нашел несколько способов:

 

1. IPS connect

2. Хуки

3. Изменение функций

 

1-ый способ уместен лишь в том случае, когда пользователь с сайта A(в данном случае это мой сайт) смог зарегистироваться на сайте B(форум IPboard) - по крайней мере я именно этот вариант увидел. Но как в это случае мне взять данные после того как пользователь зарегистрировался на форуме такие как логин, пароль и так далее, чтобы передать их в функцию регистрации сайта A?

 

2-ой способ, на данный момент мне кажется более правильным. Но хуки здесь работают немного иначе нежели в тех CMS-ках на которых я программирую. А какого-то более ли менее внятного мануала я не нашел (тем более на русском). Поэтому вопрос относительно хуков таков : Какой хук нужно использовать для перехвата пользовательских данных , дабы потом отправить эти данные в метод регистрации другого сайта. Я надеюсь на основе ваших советов, я пойму принцип работы с хуками, дабы подцепиться к данным при обновелнии профиля и его удалении.

 

3. Просто найти нужные функции регистрации, обновления, удаления и перед внесением обработанных данных в БД IPBoard отправить их в соотвествущую функцию моего сайта.

 

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

Share this post


Link to post
Share on other sites

1. Модуль авторизации из внешней базы данных.

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

 

2. memberSync.php

В структуре приложений входит файл memberSync.php* который содержит методы onCreateAccount, onLogin, onLogOut и вызываются в свою очередь при выполнении этих событий. Таким образом можно синхронизировать пользователей форума и сайта.

 

Если речь идет о WP есть уже готовые решения для двухсторонней интеграции этих систем.

 

Интеграция

Единная регистрация

 

* - у IPS 4 другая архитектура.

Share this post


Link to post
Share on other sites

Благодарю за ответ. использовал 2-ой способ, регистация с IPBoard на мой сайт проходит на ура. Но теперь возникла проблема в другой штуке:

 

Когда я на стороннем сайте в скрипте делаю следующее:

 

require_once $path . '/init.php';

 

Мне выводит ошибку

Fatal error:  Call to undefined method IPS\collections\Item::parents() in /home/probike/public_html/forums/system/Content/Controller.php on line 405

 

Хотя как я понял такой ошибки не должно возникать, так как в большинстве примеров по работе работе с ipboard через внешние файлы, подключается данный файл, но у меня он почему-то выдает ошибки. Вы незнаете как это можно пофиксать ?

Share this post


Link to post
Share on other sites

<?php

require_once 'init.php';
\IPS\Dispatcher\Front::i()->init();

var_dump( \IPS\Member::loggedIn()->member_id );

?>

 

Никаких ошибок при его подключении не вижу.

Share this post


Link to post
Share on other sites

IPS\collections\Item - класс приложения Collections (Garage).

Тут правильнее будет написать автору. Или дебажьте код, данные для этого есть.

Share this post


Link to post
Share on other sites

Там дело даже не в апи, приложение на самом форуме работает не правильно.

Share this post


Link to post
Share on other sites

Доброго времени суток. Спасибо за ваши ответы. Исправил ошибку, возникавшую при подключении инициализационного файла IPBoard. Проблема заключалась в том, что я подключал данный файл внутри функции класса CMS системы, где классы по сути не были в областях имен (namespaces) вот он и ругался, мол тут не используется наймспейс, а откуда я тебе найду нужный метод Parents(). Проблему решил подключением форума внекласса ( в самом начале индексного файла CMS). Но тут возникла, последнее затруднение - я не могу поменять пароль пользователя, используя объект IPS\Member.

 

$login_type = "email"; 
try
 {
           $member = \IPS\Member::load( $account_info['Mail'], $login_type );
       }
       catch ( \OutOfRangeException $e )
       {
           \IPS\Output::i()->error( 'node_error', '2C114/2', 404, '' );
       }

       $member->members_pass_salt = $member->generateSalt();
       $member->members_pass_hash = $member->encryptedPassword( $new_password );
       $member->save();

 

Пароль зараза не работает, хотя метод save судя по документации должен создавать/обновлять данные пользователя. Может быть я чего не так делаю ? Заранее спасибо за вашу помощь.

Share this post


Link to post
Share on other sites

В загружаете пользователя по email, проверьте чтобы этот email в таблице был уникальным.

Проверьте содержимое пароля, не применяется ли к нему какое-то преобразование к спецсимволом в сторонней кмс.

 

 

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

У вас эта ошибка присутствует в самом приложение на форуме, только в другой строке. Если бы дело было в одном пространстве имен, api бы отвалилась сразу с первом вызовом из пространства форума.

Share this post


Link to post
Share on other sites
В загружаете пользователя по email, проверьте чтобы этот email в таблице был уникальным.

Проверьте содержимое пароля, не применяется ли к нему какое-то преобразование к спецсимволом в сторонней кмс.

 

Спасибо за вашу помощь, мост между двумя системами работает на ура и тут буквально пару дней назад пришел запрос "зацепить" регистрирующихся пользователей из Фейсбука, Твиттера и так далее. И тут у меня из-за незнания IPBoard возник вопрос:

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Т.е. получается их никак нельзя перехватить ?

 

Я думал что можно зацепиться где в функционале, мол когда он создает пользователя он ему генерит какой-то пароль ( и в этот момент мне подцепиться и слить этот пароль к себе в БД). Есть ли какие-нибудь предложения? Оказывается сейчас по статистике большое количество людей регается при помощи соц сетей.

Share this post


Link to post
Share on other sites

Генерировать пароль можно в том же MemberSync, другое дело что он не сможет им авторизироватся на сайте потому что он его не знает. В этом случае придется ему высылать пароль либо на емайл либо на в ПМ.

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