Авторизация в XenForo из сторонних скриптов

ddos613

Проверенные
Сообщения
7
Реакции
10
Баллы
8,100
Добрый день, уважаемые форумчане. Назрел такой вот вопрос:

Имеется сайт site.ru и форум на ксенфоро 1.2.1 в site.ru/forum.
Сайт на самописном движке, либо wordpress.

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

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

Как подключать классы XF я знаю, могу сделать так, чтобы пользователя узнавало, если он авторизован на форуме. Как попросить XenForo проверить пользователя на валидность — тоже знаю. Но при использовании функции authenticate($user,$pass), производится только проверка на правильность логина и пароля, в форум пользователь не входит.

Мне же нужна форма авторизации с сайта. Ну и чтобы при этом юзер входил и на форум и был авторизованным.

Перерыл тонну информации по XF, находил много похожего, но вот того, что нужно — нет.

P.S Задам заодно второй вопрос, чтобы не создавать еще тем. Имеется база данных XenForo 1.1.2. Нужно достать оттуда некоторых пользователей, и перенести их на новый форум, на версии 1.2.1, сохранность ID не имеет значения, нужно просто добавить новых юзеров из старой БД, пересечений имен пользователей не будет. Главное, чтобы они могли войти под своими логинами и паролями. Насколько знаю, в 1.2.1 сменился алгоритм авторизации. На крайний случай, пусть даже они не смогут входить под своими паролями, но смогут восстановить пароль на почту, которую указывали при регистрации на старом форуме.
Простым копированием из xf_user я ничего не добился, также копировал пользователей из xf_user_authenticate и других таблиц, где нашел связи с ID. Но новый форум отказался воспринимать "не родных" юзеров.

Всем заранее спасибо за помощь и советы.
 
По первому вопросу ничего сказать не могу, это всё сложно...
По второму: самый просто вариант - это создать новых пользователей вручную через админку, но тут тогда с паролями беда получится... Если только создать пользователей ручками, установить им пароли по-умолчанию одинаковые и повесить об этом объявление, но это опять же чревато.
 
Нет, ручками не вариант, там как минимум наверное человек 1000 выйдет :)

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

А первый вопрос так и остается открытым.
 
  • Мне нравится
Реакции: Hope
По первому вопросу. Есть мост вордпрес. Но, даже если он не нужен, в нём можно подглядеть реализацию авторизации...
http://xenforo.info/resources/xenscripts-wordpress-to-xenforo-bridge.304/
По второму вопросу перетягивай базы внимательнее - должно получиться...
 
По первому вопросу. Есть мост вордпрес. Но, даже если он не нужен, в нём можно подглядеть реализацию авторизации...

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

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

Перетянув одного пользователя (Из 2-3 таблиц перетягивал), получилось так, что в админке я его увидел, но отредактировать не смог, получая ошибки и глюки, видимо "битый" получился. И войти под его паролем не смог. И сменить его пароль тоже. Решил не рисковать, дабы потом не обнаружить какой-либо баг, когда форум уже обрастет контентом.

В БД есть таблицы, связанные с пользователями: xf_user, xf_user_authenticate, они точно связаны с пользователями и их входом. Но их недостаточно для того, чтобы форум "видел" пользователей. Может нужно еще из некоторых других таблиц перетащить? Знать бы минимум, который нужен для переноса.

Если получится сделать так, то старых пользователей можно будет авторизовывать и по старым паролям, достаточно будет сменить класс в xf_user_authenticate
 
Последнее редактирование:
Что-то мне подсказывает, что так же нужно перетаскивать данные из таблицы xf_user_profile.
Оттуда тоже тянул, да, там еще бинарные данные в полях есть. Подозреваю еще какие-то таблицы точно нужны, ибо при таком раскладе созданный искусственно юзер даже из админки не редактируется (при нажатии на кнопку "сохранить", получаю сообщение о том, что имя пользователя уже используется, потом страница обновляется и кнопка "сохранить" превращается в "создать пользователя").

Что ж, время экспериментов.
 
  • Мне нравится
Реакции: Hope
Если так посудить, то все таблицы с префиксом xf_user_ нужно перетаскивать...
Да, но многие данные, вроде банов, счетчиков сообщений и лайков мне просто не нужны.

Тем более на почти чистом форуме большинство таблиц с префиксом xf_user_... вообще пустые, это показывает что они необязательны до тех пор, пока у пользователя не появятся те данные, которые они должны содержать.

Спасибо всем за ответы и неравнодушие! Буду решать поставленные задачи, если решу — поделюсь результатом для общего пользования, может кому-нибудь и понадобится.[DOUBLEPOST=1379357247,1379267638][/DOUBLEPOST]

Мост не реализует авторизацию "из стороны", а наоборот ломает форму авторизации WP, если ее вынести на главную. Но, обе проблемы решены.

Первая проблема решается так:
  1. Ставим мост WP to XF, если используется вордпресс, или же делаем так, чтобы ваши странички узнавали залогиненного юзера XF. Гайдов по этому множество, можно найти, поэтому углубляться не буду.
  2. В страницу, или шаблон wp, где должна быть форма входа добавляем такой вот код. Стили можете поменять.
    PHP:
    <?php
                    if ( is_user_logged_in() ) {
                        $user = wp_get_current_user();
                        print get_avatar( $user->user_email, '32' ); ?> //32 - размер аватара в пикселях
                        <ul>
                            <li><strong><?php print $user->display_name; ?></strong></li>
                            <li><a href="/forum/members/.<?php print $user->id; ?>">профиль</a></li>
                            <li><a href="<?php print wp_logout_url( site_url( $_SERVER['REQUEST_URI'] ) ); ?>">выйти</a></li>
                        </ul>
                    <?php
                    } else {
    
        echo '<a href="http://ваш.сайт/forum/register">Регистрация</a>';
    ?>
    <div id="xenlogin">
        <form action="http://ваш.сайт/forum/login/login" method="post" id="pageLogin">
    
            <div class="ctrlWrapper">
                <dl class="ctrlUnit">
                    <label for="LoginControl">Ваш ник или email:</label>
                    <input type="text" name="login" id="LoginControl" class="textCtrl" tabindex="101" />
    
                    <label for="ctrl_password">Ваш пароль:</label></dt>
                    <input type="password" name="password" id="ctrl_password" class="textCtrl" tabindex="102" />
    
                    <input type="submit" class="button primary" value="Войти" checked="checked" tabindex="104" data-loginPhrase="log_in" data-signupPhrase="log_in" />
                    <label for="ctrl_remember" class="rememberPassword">
                    <input type="checkbox" name="remember" value="0" id="ctrl_remember" tabindex="103" />Запомнить меня</label>
            </div>
    
            <input type="hidden" name="cookie_check" value="1" />
            <input type="hidden" name="redirect" value="<?php header("Location:".$_SERVER['HTTP_REFERER']);?>" />
            <input type="hidden" name="_xfToken" value=" ' . $XF->visitor->get( 'visitor.csrf_token_page' ) . ' " />
    
        </form>
    </div>
      <? }  ?>
  3. Готово! Все работает.
Перенос юзеров тоже вполне осуществим. Для этого:
  1. В старой БД отыскиваем нужного юзера в таблице xf_user.
  2. Переносим в новую БД, и запоминаем новый ID.
  3. Переносим данные из других таблиц, не забывая менять старый ID на новый.
Список таблиц, в которых находятся обязательные параметры:
  1. xf_user
  2. xf_user_authenticate
  3. xf_user_profile
  4. xf_user_option
  5. xf_user_group_relation
  6. xf_user_privacy
Может я конечно и ошибаюсь, но именно при этих таблицах, новый форум "принял" пользователя как своего родного. До этого лишь только обзывал "гостем", невозможно было залогиниться или отредактировать его.

Что ж, пища для размышления дана, остается только автоматизировать данный процесс, что не составит большого труда.
 
Вообще отлично! Рад, что Вы всё решили и мануал многим будет полезен. Спасибо. :)
Могу вынести в отдельную тему мануал, чтобы было куда направлять при таких вопросах, а в этой теме оставить ссылку в прошлом моем посте :)
Заодно там могу дописать о таких вещах, как подключение ядра XenForo в своих скриптах, использование его методов проверки логина/пароля, а также сессий, чтобы залогиненный на форуме пользователь узнавался на сторонних скриптах.
 
Hope, времени пока что в обрез просто, никак не могу выкроить свободный часик. Еще и простуда, будь она неладна.

Постараюсь найти время, дописать и выложить. Про форум не забыл, хорошее место :)
 
Я так понимаю, ответы на вопросы форуме должны быть ответами а не словоблудием!!! Читать этот бред просто стыдно.
Тема:
Авторизация в XenForo из сторонних скриптов
а Вы что отвечаете, как использовать мост для WP. Смысл темы расшифровываю для особо одаренных: Как использовать MVC архитектуру XenForo для Авторизации сторонними скриптами.


Дети, программирование - это практика и знания. А у вас нет ни первого ни второго.

Не много умных, полезных слов!!!

MVC

XenForo полностью основан на MVC архитектуре. Есть отдельные классы для моделей, видов и контроллеров. Корневой index.php имеет размер в 467 байт и заканчивается, как и положено в таких случаях

PHP:
$fc = new XenForo_FrontController(new XenForo_Dependencies_Public());
$fc->run();

Разумеется, в ходу автозагрузчик классов. Система именования классов как в ZF.

Сама MVC пока внутри использует классы Zend, но то, что XenForo_Controller не унаследован от соответствующих классов ZF, говорит о том, что эта часть будет переписана.

Все контроллеры унаследованы примерно одинаково: class XenForo_ControllerPublic_Forum extends XenForo_ControllerPublic_Abstract. После Symfony с ее actions такой подход несколько непривычен, но к нему быстро привыкаешь.

Система роутинга спроектирована расширяемой. Расширение происходит через привязку префиксов URL к классам-обработчикам. SEO из коробки, разумеется. Никаких плагинов не требуется.

Модель контента

Архитектура XenForo закладывалась надолго :-) Во всяком случае, в первый раз в форумном движке я встретил более-менее внятную архитектуру контента, слегка напоминающую Drupal («Everything is a node», помните?). Пока в XenForo типов контента четыре: категория, раздел форума, страница и ссылка (обычный редирект). Каждый тоже называется Node. Причем, каждый экземпляр узла может быть предком/потомком экземпляра другого типа. Пока не знаю, как эта гремучая смесь, например, из страницы и дочернего ей раздела форума, будет отображаться, не пробовал :-). Причем, некоторые типы контента можно слегка расширять прямо из коробки. Так, например, для страницы помимо, собственно, ее HTML содержимого можно указать PHP обработчик, который получит из БД дополнительные данные, изменит дизайн страницы, вставит в нее информацию или вообще плюнет в пользователя ошибкой. PHP обработчики везде указываются не кодом на PHP, как этого можно было ожидать, а именами класса и метода. При активации хука класс будет загружен автолоадером (соответственно, должен быть правильно расположен в файловой системе).

Типы контента пока заданы жестко, самому добавить их не получится. Даже их названия в админке почему-то не локализованы.

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

XenForo использует и Zend Framework. Причем, наличие в коде мест, подобных
PHP:
............
        /*require_once('Zend/Loader/Autoloader.php');

        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->pushAutoloader(array($this, 'autoload'));*/
        spl_autoload_register(array($this, 'autoload'));
скорее всего, означает, что от лишних зависимостей на протяжении разработки продолжат избавляться, заменяя их на что-то свое более легковесное и более специализированное.

Из ZF используется совсем немного классов. В их числе Zend_Registry (в качестве реестра для синглтон-подобных объектов вроде экземпляра XenForo_Db), Zend_Config, Zend_Cache (много чего кеширует, в частности используется в базовом классе моделей XenForo_Model), Zend_Service_ReCaptcha, Zend_Http_Client, Zend_Mail, Zend_Validate и некоторые другие.

Для работы с базой данных используется часть бандла Zend_DB (Zend_Db_Adapater_Abstract и Ко), завернутая в классе XenForo_DB, что опять говорит о том, что и эту часть в последствии перепишут.

Конструктор запросов не используется, они встроены прямо в код, как обычно (что, конечно, несколько затруднит поддержку нескольких баз данных. Но с другой стороны, запросы сконцентрированы внутри модели, так что...)

Курите мануалы по листику и будет вам счастье.
 
Последнее редактирование:
Забавно.
Ребята решают свою конкретную задачу в плане авторизации на форуме из других скриптов. Приходит dimruss, обозначает совсем другую тему и дает ликбез о архитектуре форума. Ликбез в целом полезный и возможно кому-то пригодится, но какое отношение обзор архитектуры имеет к вопросу авторизации?
Да еще и тон такой менторский, как у плохого учителя в сельской школе.
 
akinak, на самом деле проблема в том, что dimruss просто некропостер, потому что умудрился своим копипастом поднять тему двухгодичной (!) давности, но не учел, что его копипаст слишком заметен и за подобного рода ведение диалогов на форуме нужные "симпатии" он не получит в любом случае.
 
Я так понимаю, ответы на вопросы форуме должны быть ответами а не словоблудием!!! Читать этот бред просто стыдно.
Тема:
Авторизация в XenForo из сторонних скриптов
а Вы что отвечаете, как использовать мост для WP. Смысл темы расшифровываю для особо одаренных: Как использовать MVC архитектуру XenForo для Авторизации сторонними скриптами.


Дети, программирование - это практика и знания. А у вас нет ни первого ни второго.

Не много умных, полезных слов!!!

MVC

XenForo полностью основан на MVC архитектуре. Есть отдельные классы для моделей, видов и контроллеров. Корневой index.php имеет размер в 467 байт и заканчивается, как и положено в таких случаях

PHP:
$fc = new XenForo_FrontController(new XenForo_Dependencies_Public());
$fc->run();

Разумеется, в ходу автозагрузчик классов. Система именования классов как в ZF.

Сама MVC пока внутри использует классы Zend, но то, что XenForo_Controller не унаследован от соответствующих классов ZF, говорит о том, что эта часть будет переписана.

Все контроллеры унаследованы примерно одинаково: class XenForo_ControllerPublic_Forum extends XenForo_ControllerPublic_Abstract. После Symfony с ее actions такой подход несколько непривычен, но к нему быстро привыкаешь.

Система роутинга спроектирована расширяемой. Расширение происходит через привязку префиксов URL к классам-обработчикам. SEO из коробки, разумеется. Никаких плагинов не требуется.

Модель контента

Архитектура XenForo закладывалась надолго :-) Во всяком случае, в первый раз в форумном движке я встретил более-менее внятную архитектуру контента, слегка напоминающую Drupal («Everything is a node», помните?). Пока в XenForo типов контента четыре: категория, раздел форума, страница и ссылка (обычный редирект). Каждый тоже называется Node. Причем, каждый экземпляр узла может быть предком/потомком экземпляра другого типа. Пока не знаю, как эта гремучая смесь, например, из страницы и дочернего ей раздела форума, будет отображаться, не пробовал :-). Причем, некоторые типы контента можно слегка расширять прямо из коробки. Так, например, для страницы помимо, собственно, ее HTML содержимого можно указать PHP обработчик, который получит из БД дополнительные данные, изменит дизайн страницы, вставит в нее информацию или вообще плюнет в пользователя ошибкой. PHP обработчики везде указываются не кодом на PHP, как этого можно было ожидать, а именами класса и метода. При активации хука класс будет загружен автолоадером (соответственно, должен быть правильно расположен в файловой системе).

Типы контента пока заданы жестко, самому добавить их не получится. Даже их названия в админке почему-то не локализованы.

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

XenForo использует и Zend Framework. Причем, наличие в коде мест, подобных
PHP:
............
        /*require_once('Zend/Loader/Autoloader.php');

        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->pushAutoloader(array($this, 'autoload'));*/
        spl_autoload_register(array($this, 'autoload'));
скорее всего, означает, что от лишних зависимостей на протяжении разработки продолжат избавляться, заменяя их на что-то свое более легковесное и более специализированное.

Из ZF используется совсем немного классов. В их числе Zend_Registry (в качестве реестра для синглтон-подобных объектов вроде экземпляра XenForo_Db), Zend_Config, Zend_Cache (много чего кеширует, в частности используется в базовом классе моделей XenForo_Model), Zend_Service_ReCaptcha, Zend_Http_Client, Zend_Mail, Zend_Validate и некоторые другие.

Для работы с базой данных используется часть бандла Zend_DB (Zend_Db_Adapater_Abstract и Ко), завернутая в классе XenForo_DB, что опять говорит о том, что и эту часть в последствии перепишут.

Конструктор запросов не используется, они встроены прямо в код, как обычно (что, конечно, несколько затруднит поддержку нескольких баз данных. Но с другой стороны, запросы сконцентрированы внутри модели, так что...)

Курите мануалы по листику и будет вам счастье.

Боян с хабра.


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

С учетом того, что я спрашивал как-то об авторизации и в теме силами форумчан был написан полный скрипт этой самой авторизации(за что им еще раз спасибо)...
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу