Интеграция форума phpBB в Yii
У любого разработчика может возникнуть необходимость установки форума на сайт, написанный на Yii. Простой установкой в отдельную папку на сервере и в отдельную или эту же базу данных это порой не ограничивается. С большой вероятностью разработчику нужно будет организовать единую сквозную авторизацию на сайте и форуме. Попробуем это сделать.
Мы должны придумать систему, которая бы синхронизировала пользователей нашего приложения (в дальнейшем «сайта») с пользователями форума, а также производила авторизацию одновременно. В сети нашлось несколько советов по интеграции к любому сайту, но почти нет материалов про интеграцию форума phpBB конкретно к Yii Framework. Рассмотрим некоторые вопросы.
Ведение базы пользователей
Первым делом надо решить, где будет храниться главная база пользователей (на исходном сайте или на форуме). Можно рассматривать три подхода:
Хранение единой базы пользователей на форуме
Используется таблица phpbb_users
на форуме, и она же используется для модели User. Таблица tbl_user
с сайта удаляется, а её поля добавляются в phpbb_users
. Получается одна таблица с большим количеством полей.
Плюсы подхода:
- Таблица одна, данные в одном экземпляре, поэтому не нужна синхронизация;
- Регистрироваться можно в любом месте (либо на сайте, либо на форуме).
Минусы:
- Необходимость переименовывать поля модели User под формат таблицы форума, что усиливает связанность системы;
- Модель User при регистрации на сайте должна на низком уровне работать со служебными таблицами и полями форума;
- Изменение системы хэширования пароля (чтобы на сайте и на форуме хэширование происходило одинаково);
- При размещении форума в другой базе данных возникают проблемы с кроссбазовыми JOIN запросами.
Действительно, чтобы зарегистрировать пользователя нужно заполнить служебные поля таблицы phpbb_users
, а потом для этого пользователя добавить запись в таблицу phpbb_user_group
.
Хранение основной базы на сайте с синхронизацией в базу форума
Таблицы на сайте и на форуме остаются как есть. При обновлении первой данные автоматически копируются во вторую. Страницы регистрации и редактирования общих данных профиля на форуме закрываются.
Плюсы:
- Таблицы и модели на сайте и на форуме остаются нетронутыми;
- Реляционные запросы можно выполнять и там, и там;
- Таблицы форума можно спокойно держать в другой базе (и на другом сервере);
- Можно работать через API форума, не заботясь о хэшах.
Минусы:
- Необходимость написания системы синхронизации;
- Закрытие регистрации и некоторых настроек профиля на форуме.
Второй минус решается добавлением простых редиректов с форума на страницы регистрации и редактирования профиля на сайте.
Хранение основной базы в форуме с синхронизацией в базу сайта
Плюсы и минусы этой системы такие же, как и у предыдущей, за исключением того, что модуль синхронизации нужно дописывать к форуму. Для работы с ActiveRecord моделью User нужно будет поднять приложение Yii непосредственно из кода форума, что не очень оправдано.
Первый подход из приведённых требует много жертв, третий – немного не оправдан, так как нам нужно привязать форум к сайту, а не сайт к форуму. Второй подход выглядит наиболее подходящим.
Создание модуля синхронизации
В исходниках форума можно подсмотреть алгоритм работы с пользователями. До нас это уже подсмотрели, поэтому можно спокойно взять готовое расширение отсюда и немного модифицировать.
Данный компонент умеет логинить, добавлять, удалять и обновлять пользователей.
Установим phpBB в папку forum
, указав имя пользователя Admin и любой пароль. Также на наш сайт добавим администратора с таким же именем пользователя и паролем. Теперь можно пробовать.
Распакуем архив в папку расширений, а в конфигурационный файл protected/config/main.php
добавим объявление компонента:
return array( // ... 'components'=>array( // ... 'phpBB'=>array( 'class'=>'ext.phpBB.phpBB', 'path'=>dirname(dirname(dirname(__FILE__))).'/forum/', ), ), );
Перед использованием нужно исправить пару моментов.
В нашем свежем форуме нужно зайти в административный раздел и в настройках регистрации отключить опцию «Активация аккаунта». Далее в файле phpBB.php этого расширения в метод init()
добавить импорт обработчика UTF-8 и поменять формат представления пути path
:
class phpBB extends CApplicationComponent { // ... public function init() { if(!$this->path) throw new CException("Don't set forum path"); Yii::import($this->path . '.includes.utf.utf_normalizer'); $this->_phpbb = new phpbbClass(Yii::getPathOfAlias($this->path) . DIRECTORY_SEPARATOR, $this->php); } // ... }
Теперь в настройках компонента заменим путь на его псевдоним 'webroot.forum':
return array( // ... 'components'=>array( // ... 'phpBB'=>array( 'class'=>'ext.phpBB.phpBB', 'path'=>'webroot.forum', ), ), );
Это расширение использует функционал форума, а именно запускает файл forum/common.php
и использует встроенные методы форума. Сам форум использует свой класс user
, поэтому при первом же обращении к компоненту мы увидим ошибку о попытке перезаписать класс User
. Необходимо разрешить этот конфликт имён. Для этого откроем файл forum/includes/session.php
и переименуем класс user
и его конструктор
class user extends session { // ... function user() // ... }
в любой другой
class bbuser extends session { // ... function bbuser() // ... }
И в файле forum/common.php
исправим операцию создания экзепляра
// Instantiate some basic classes $user = new user();
соответственно на
// Instantiate some basic classes $user = new bbuser();
После этого можно попробовать добавить пользователя и авторизоваться
Yii::app()->phpBB->userAdd('TestUser', 'password', 'email@site.com', 2); Yii::app()->phpBB->login('TestUser', 'password');
Если всё пройдёт успешно, то перейдя на форум мы увидим себя авторизованными.
Сквозная авторизация
У нас появился инструмент для управления пользователями, теперь осталось его правильно применить.
Производить авторизацию на форуме нужно в момент авторизации на сайте, поэтому можно поместить код входа/выхода в стандартные действия контроллера:
class SiteController extends Controller { public function actionLogin() { $model = new LoginForm(); if(isset($_POST['LoginForm'])) { $model->attributes = $_POST['LoginForm']; if($model->validate() && $model->login()) { // Авторизуем Yii::app()->phpBB->login($model->username, $model->password); $this->redirect(Yii::app()->user->returnUrl); } } $this->render('login',array('model'=>$model)); } public function actionLogout() { Yii::app()->user->logout(); // Выходим Yii::app()->phpBB->logout(); $this->redirect(Yii::app()->request->urlReferrer ? Yii::app()->request->urlReferrer : Yii::app()->homeUrl); } }
Но этот вариант не очень удачный, так как, во-первых, заставляет нас во многих местах дополнять код нашего приложения, а во-вторых, при использовании авторизации через социальные сети нам придётся вписывать этот код и в другие контроллеры.
Откажемся от этой затеи и уберём добавленный код из контроллеров.
Исследуя код метода LoginForm::login
и действия SiteController::actionLogout
, мы можем заметить, что вход и выход осуществляются с использованием вызова методов компонента Yii::app()->user
:
// Вход Yii::app()->user->login($this->_identity, $duration); // Выход Yii::app()->user->logout();
Компонент Yii::app()->user
используется всеми видами авторизации на сайте, поэтому код авторизации на форуме нам нужно поместить в него. По умолчанию это экземпляр класса CWebUser
. Этот класс содержит шаблонные методы afterLogin
и afterLogout
, которые мы можем легко переопределить в наследнике WebUser
. Достаточно переопределить эти методы и поместить в них код авторизации на форуме.
Если Вы строили своё первое приложение по официальному руководству и используете RBAC, то наверняка у вас этот класс переопределён вашим классом WebUser
для получения роли пользователя:
class WebUser extends CWebUser { private $_model = null; function getRole() { if($user = $this->getModel()) return $user->role; else return 'guest'; } private function getModel() { if (!$this->isGuest && $this->_model === null) $this->_model = User::model()->findByPk($this->id, array('select' => 'role')); return $this->_model; } }
и он подключен вместо стандартного:
'user'=>array( 'class'=>'WebUser', 'allowAutoLogin'=>true, 'loginUrl'=>array('site/login'), ),
Постараемся не нарушать его работу. Просто отнаследуемся прямо от этого класса:
class PhpBBWebUser extends WebUser { protected function afterLogin($fromCookie) { } protected function afterLogout() { } }
Но вот незадача: компоненту phpBB
для авторизации нужно передавать имя пользователя и пароль в виде Yii::app()->phpBB->login($username, $password)
, а в afterLogin
эти данные недоступны. Их можно извлечь из экземпляра UserIdentity
, который передаётся при логине. Декорируем метод CWebUser::login
так, чтобы переданный в него объект $identity
сохранялся в приватной переменной:
class PhpBBWebUser extends WebUser { private $_identity; public function login($identity, $duration=0) { $this->_identity = $identity; return parent::login($identity, $duration); } protected function afterLogin($fromCookie) { } protected function afterLogout() { } }
Теперь мы можем из $this->_identity
получить введённые имя пользователя и пароль:
class PhpBBWebUser extends WebUser { private $_identity; public function login($identity, $duration=0) { $this->_identity = $identity; return parent::login($identity, $duration); } protected function afterLogin($fromCookie) { if ($this->_identity !== null) Yii::app()->phpBB->login($this->_identity->username, $this->_identity->password); parent::afterLogin($fromCookie); } protected function afterLogout() { Yii::app()->phpBB->logout(); parent::afterLogout(); } }
Заменим в настройках класс на новый:
'user'=>array( 'class'=>'PhpBBWebUser', 'allowAutoLogin'=>true, 'loginUrl'=>array('site/login'), ),
C авторизацией на этом всё. Можно попробовать войти в свой аккаунт и если пароли на сайте и на форуме совпадают, то авторизация на форуме должна работать синхронно. Обратная авторизация работать не будет, так как форум на наш сайт не влияет.
Теперь для подключения авторизации к любому из наших сайтов нам нужно всего лишь поменять класс WebUser
на PhpBBWebUser
в конфигурационном файле.
Синхронизация пользователей
В примитивном случае, можно добавить код добавления пользователя в код регистрации:
class SiteController extends Controller { public function actionRegistration() { $model = new User(User::SCENARIO_REGISTER); if(isset($_POST['User'])) { $model->attributes = $_POST['User']; if ($model->save()) { // Добавляем пользователя Yii::app()->phpBB->userAdd($model->username, $model->password, $model->email, 2); Yii::app()->user->setFlash('register-form','Регистрация завершена'); $this->refresh(); } } $this->render('register', array('model'=>$model)); } }
Но, как мы уже видели, это не лучший путь. Пользователей может добавлять администратор, при регистрации через аккаунт социальных сетей пользователи создаются автоматически в другом контроллере и т.д. К тому же, куда поместить код удаления пользователя?
По аналогии с предыдущим подходом мы можем использовать методы afterSave
и afterDelete
, но уже в модели User:
class User extends CActiveRecord { public $new_password; // ... private $_isNew; protected function beforeSave() { $this->_isNew = $this->getIsNewRecord(); return parent::beforeSave(); } protected function afterSave() { if ($this->new_password) { if ($this->_isNew) Yii::app()->phpBB->userAdd($this->username, $this->new_password, $this->email, 2); else Yii::app()->phpBB->changePassword($this->username, $this->new_password); } parent::afterSave(); } protected function afterDelete() { Yii::app()->phpBB->userDelete($this->username); } }
Этот функционал уже умеет синхронно создавать пользователей на форуме, удалять их и менять пароль.
Чтобы не загромождать наш код удалим эти дополнения из модели
class User extends CActiveRecord { public $new_password; // Здесь были обработчики }
и перенесём его в поведение:
class PhpBBUserBahavior extends CActiveRecordBehavior { public $usernameAttribute = 'username'; public $newPasswordAttribute = 'new_password'; public $emailAttribute = 'email'; private $_isNew; public function beforeSave($event) { $model = $this->getOwner(); $this->_isNew = $model->getIsNewRecord(); } public function afterSave($event) { $model = $this->getOwner(); if ($model->{$this->newPasswordAttribute}) { if ($this->_isNew) Yii::app()->phpBB->userAdd($model->{$this->usernameAttribute}, $model->{$this->newPasswordAttribute}, $model->{$this->emailAttribute}, 2); else Yii::app()->phpBB->changePassword($model->{$this->usernameAttribute}, $model->{$this->newPasswordAttribute}); } } public function afterDelete($event) { $model = $this->getOwner(); Yii::app()->phpBB->userDelete($model->{$this->usernameAttribute}); } }
Подключим теперь это поведение к нашей модели User:
class User extends CActiveRecord { public $new_password; // ... public function behaviors() { return array( 'PhpBBUserBahavior'=>array( 'class'=>'PhpBBUserBahavior', 'usernameAttribute'=>'username', 'newPasswordAttribute'=>'new_password', 'emailAttribute'=>'email', ), ); } }
Как видим, теперь для подключения форума к любому сайту на Yii достаточно всего лишь заменить имя класса компонента user
на PhpBBWebUser
и приписать поведение PhpBBUserBahavior
к классу User
. И, собственно, всё.
Синхронизация данных пользователя
В предыдущем примере мы написали поведение для управления пользователями и для смены пароля. Его уже достаточно, но что делать, если мы хотим автоматически обновлять атрибуты профиля (например, site
, icq
) и аватарку? Для этого достаточно добавить в afterSave
код обновления данных и копирования изображения в папку аватарок на форуме.
Готовое поведение можно найти во всём наборе здесь:
Оно при необходимости копирует фотографию пользователя в папку аватарок форума и синхронизирует указанные атрибуты.
В комплекте также содержится модель PhpBBUser
, отражающая запись в таблице форума.
В полном виде можно использовать поведение и модель так:
class User extends CActiveRecord { public function behaviors() { return array( 'PhpBBUserBehavior'=>array( 'class'=>'phpbb.components.PhpBBUserBehavior', 'usernameAttribute'=>'username', 'newPasswordAttribute'=>'new_password', 'emailAttribute'=>'email', 'avatarAttribute'=>'avatar', 'avatarPath'=>'webroot.upload.images.avatars', 'forumDbConnection'=>'forumDb', 'syncAttributes'=>array( 'site'=>'user_website', 'icq'=>'user_icq', 'from'=>'user_from', 'occ'=>'user_occ', 'interests'=>'user_interests', ) ), ); } public function relations() { Yii::import('phpbb.models.*'); return array( 'phpBbUser'=>array(self::HAS_ONE, 'PhpBBUser', array('username'=>'username')), ); } }
Здесь мы подключили поведение для синхронизации и отношение phpBbUser
к строке пользователя форума. С помощью этого отношения мы можем выводить поля из базы данных форума. Модель PhpBBUser
содержит также обратное отношение user
к модели User
и отношение friends
для получения списка друзей, поэтому можно производить переход между User
и PhpBBUser
в любую сторону.
Вывод числа непрочитанных сообщений:
<?php $model = User::model()->findByPk(Yii::app()->user->id); Личный сообщения: <a href="/forum/ucp.php?i=pm&folder=inbox">Новых echo $model->phpBbUser->user_unread_privmsg; </a>
Вывод списка друзей:
foreach ($model->phpBbUser->friends as $friend) { echo $friend->user->name . ' ' . $friend->user->lastname . ' ' . $friend->age; }
В комплекте есть пример виджета для вывода списка друзей любого пользователя.
Последние штрихи
На форуме мы отключили активацию учётной записи.
Теперь нам нужно убрать ненужные страницы входа и регистрации. Удалять ссылки из шаблонов мы не будем. Просто поставим редиректы на страницы сайта.
Открываем файл forum/ucp.php
и добавляем строки переадресации в ненужные теперь действия (подсмотрено здесь):
case 'register': header('location: /site/registration'); exit(); break; case 'login': header('location: /site/login'); exit(); break; case 'logout': header('location: /site/logout'); exit(); break;
Теперь откроем шаблоны ucp_profile_profile_info.html
и ucp_profile_avatar.html
текущей темы и удалим оттуда поля ввода для аватарки, мессенжеров и описания интересов. Оставляем там только просмотр информации.
Исправление системных файлов форума затрудняет его обновление. Поэтому если Вы не хотите трогать код ядра, то организуйте перенаправления в файле
.htaccess
. Если ваше приложение использует класс User, то либо переименуйте его, либо настройте пространства имён.
Также не забудьте в форуме выставить немного большее время жизни сессии, иначе авторизация на форуме будет частенько «отваливаться».
Отлично! Когда ты только все успеваешь?
Обязательно реализую твой метод у себя на сайте.
По горячим следам, так сказать...
Отличная статья! Буду пробовать, все пошагово, должно получится. А вообще я искал немного другую информацию. Я хотел сделать всё тоже самое, но только не phpBB к сайту на yii, а DLE к сайту на yii. Как сделать единую сквозную авторизацию? Может сделаешь и по этой теме такой же подробрый урок?
Спасибо.
С DLE на уровне API я не работал, так что про устройство авторизации в нём ничего не знаю. Но всё равно нужно раскапывать работу с сессией авторизации.
и как это примерно сделать?
Найти и изучить в DLE функции, которые сохраняют информацию о залогиненном пользователе в сессию и которые добавляют (а также изменяют или удаляют) пользователя в БД.
Потом скопировать их (или съэмулировать их работу) в класс DleManager, либо «поднять» минимальное окружение DLE и прямо обращаться к системным компонентам движка, как мы запускаем бутстрап и напрямую обращаемся к методам самого phpBB (если DLE это позволяет).
Интерфейс класса можно сделать аналогичным:
Теперь достаточно подключить этот компонент в конфигурационном файле
и далее в аналогичных поведении DleUserBehavior и классе DleWebUser заменить компонент
на
Также нужно будет немного переделать остальной код под специфику DLE.
Спасибо за разъеснения, но всё же мне не под силу наверное будет это сделать самому.
Было бы прекрасно, еще под IPB или vbulletin
Ну это если вдруг руки дойдут.
Все сделал по инструкции. Пишет неправильное имя или пароль!
Может в этой сточке я ошибся?
что может быть не так?
Где пишет?
Добрый день!
Столкнулся с такой проблемой:
Авторизация на форуме происходит, даже появляется ник в графе "кто онлайн", но в браузере по прежнему висит форма с вводом логина и пароля и без авторизации на форуме делать ничего не дает. В бд появляется 2 записи о сессиях. одна запись с айди пользователя, вторая запись с айди анонима. Подскажите, пожалуйста, куда копать :)
Да уж. Даже не представляю, если честно.
Жаль. Ну ладно, буду тогда разбираться дальше :) Спасибо!
спасибо за подробный мануал. сделал по нему сквозную авторизацию.
Подскажите как настроить синхронизацию кукисов. пока что форум у меня не видит кукисов сайта..
yii и phpbb изучаю недавно.
или подскажите в какую торону копать.
У меня тоже они не видели cookies друг друга. Копать особо не стал.
А под PhpBB2 такого модуля невстречали?
Не искал. Надо попробовать на совместимость с phpBB2 и phpBB3.
странно, но у меня не хотело работать, пока не заменил
в \protected\extensions\phpBB\phpBB.php
строку
на
и только тогда юзер зарегился в phpbb и залогинился...
Ничего странного. Вы поместили его в главную папку protected/extensions, а я подключил как модуль protected/modules/phpbb/extensions. Вот путь и стал другим.
Распаковал в корень, подключил модуль - чето не пошло, начало не находить какойто и файлов.
Вобщем, сделал по своему.
Вы бы для новичком указали куда распаковать, это совсем не очевидно для меня, читаю манула и половину не понимаю.
Все понятно. Распаковал Код модуля на GitHub в корень сайта а не в папку phpbb. Ладно и так заработало после долгих мучений.
Новичкам, кто будет делать обратите внимание:
в config/main.php должно быть объявление:
Далее:
в контроллере User/Register перед сохранением
поскольку пароль передается в phpbb незахешированный его надо передать через new_password в модель User
В модели User не забываем
а сам бехавиор
Короче, помог как смог, уж не обессудьте.
переделал на модуль, все поудалял - ругается на отсутствие файла PhpBBWebUser.php - пришлось вернуть, не стал разбираться уже
также пришлось в файле phpbbuserbehavior добавить null а то php ругается на отсутствие аргумента:
public function afterSave($event=null)
public function afterDelete($event=null)
Странно, что ругается.
Еще хотелось бы узнать
array('username'=>'username') заменил на 'login' - это правильно?
Нет, так как должна быть ссылка не на первичный ключ:
То есть в вашем случае
ага понял! спасибо!!!
еще не понятно что делать с аватарами на форуме - Разрешить прямую загрузку аватар?
я так понимаю НАДО ОТКЛЮЧИТЬ, и загружать на сайте, создав в таблице user поле avatar ?
а можно ли сделать наоборот с форума данные чтобы синхронизировались?
там это все реализовано уже в профиле
Да, на форуме надо отключить (убрать поле загрузки из шаблона) и указать avatarAttribute и avatarPath на сайте, откуда они будут автоматически копироваться в аналогичную папку форума.
Или сделать по-своему, изменив метод _updateAvatar() поведения.
Никак не могу синхронизировать картинки. Выдает:
Invalid image file webroot.upload.avatars\/upload/avatars/2013-11-29-05-57-22.jpg
сделал:
все работает )
Исправил на
А у вас всё правильно получилось, просто в вашей таблице хранится полный путь /upload/avatars/2013-11-29-05-57-22.jpg, а не только имя файла.
большая просьба подсказать,
у меня на сайте логин идет через email или login
через login на форуме логинится, а вот когда ввожу email - то нет
используется UserIdentity
В UserIdentity извлеките имя пользователя из модели и присвойте его в $this->username:
там у меня поиск по логину, если не находит запись о юзере, то по емайлу ищет,
я просто добавил туда после поиска по емайл $this->username=$record->login; и все заработало ))
костыль такой получился
Извините за столь банальный вопрос... Но какие файлы из phpbb-integration-kit где находятся? Данный мануал с какими папками работает (/protected/extensions/, /protected/companents/..) или все-таки средства интеграции стоит распаковать в папку /protected/modules/phpBB или /protected/phpBB?
Можно это всё как есть закинуть как модуль phpbb, а можно раскидать отдельно по имеющимся папкам components, models и extensions. Здесь без разницы. Главное пути до этих файлов правильными указать в директивах импорта.
Спасибо, полагаю, вы в статье шли от /protected/modules/phpBB.
А не подскажите, что я делаю не так, если получаю вот такую ошибку при попытке залогиниться или разлогиниться:
Alias "www.forum.includes.utf.utf_normalizer" is invalid. Make sure it points to an existing directory or file.
www/protected/modules/phpbb/extensions/phpBB/phpBB.php(58): YiiBase::import("www.forum.includes.utf.utf_normalizer")
При этом на хостинге 2 сайта, а данный проект висит на поддомене (не уверен, что это важно, но мало ли)
Я пытаюсь интегрировать, как модуль /protected/modules/phpBB
Конфиг выглядит вот так (основные моменты):
Проблема решилась. webroot - надо было писать как есть =). Спасибо за возможность интеграции. Очень много времени удалось сэкономить, даже учитывая кучу моих ошибок =).
Подскажите еще пожалуйста, а как все-таки "сменить" пароль на форуме и на сайте, например, в каком-то не связанном контроллере и экшне? (например в SiteController'e)
Указать новый:
У меня после этих строк скрипт выдает 500ую без ошибок и т.д.... И все. Вообще никак и ничего, ни в логах - нигде... Падает именно на $user->save(); без неё работает... Да и с ней работает, как ни странно (пароль меняет, но шаблон не выдает упорно)
Долго парился и вот выцепил ошибку:
Простой установкой в отдельную папку на сервере и в отдельную
...и в отдельную или эту же базу данных...
Установил модуль, подключил и сделал все настройки как написано на гитхабе.
Но при авторизации на сайте, не входит на форуме, в чём может быть проблема? Пароль, ник и на сайте и на форуме одинаковый.
А форум не на поддомене работает?
Нет. Установлен в папку /forum. Я воспользовался другой инструкцией http://ivan-orlov.com/ru/articles/integraciya-phpbb-v-yii-framework, всё работает.
Сделал всё в точности, но, не могу ничего вывести. Ошибки на несуществующие свойства.
$user = User::model()->findByPk(1);
var_dump($user->phpBbUser) - возвращает NULL
Соответственно из-за этого не могу получить ничего с форума...
Значит в базе форума нет пользователя с таким же username. Добавьте всех имеющихся в Yii в форум конструкцией:
Спасибо, я разобрался. У меня в модели юзера в афтерфинде для логина первая буква ставилась в верхний регистр. Сделал небольшой костыль, сейчас всё работает
здравствуйте! делал синхронизацию форума с yii, по по этому примеру http://habrahabr.ru/post/190868/. статья написана на основе вашей.
сначала синхронизация работала, при переходе на форум после авторизации на сайте, я уже был авторизован на форуме. через некоторое время этот функционал перестал работать. помогите найти причину, почему не происходит совместная авторизация. или может кто знает другие методы как можно это сделать. ну очень нужна помощь, буду очень благодарен
Видимо время жизни сессии на форуме меньше, чем на сайте.
вы меня наверное неправильно поняли, сейчас, когда я логинюсь на сайте и перехожу на форум, то на форуме я не авторизовний
А на форуме никаких ограничений не включено?
а как узнать есть ли какие то ограничения?
Как-нибудь попасть в админку форума и посмотреть, выключена ли активация аккаунта, требования к сложности пароля и прочие вещи, касаемые регистрации.
кажется разобрался. надо было настройки куки и сервера настроить. скажите пожалуйста а есть возможность сделать обратную авторизацию, когда авторизуешся на форуме, и переходишь на сайт чтобы пользователь уже был авторизованный
Не пробовал. Я просто с форумных login, logout и registration редиректы на сайт сделал, как в последних предложениях указано.
Простите, я наверное вас достал со своими вопросами, но у меня есть еще один вопрос. На сайте у меня тоже присутствует авторизация через социальные сети. И когда пользователь авторизуется через соц сеть вылезает ошибка "Не определено свойство EAuthUserIdentity.username" в файле phpbbwebuser.php в этом месте
Как мне передать необходимые параметры для авторизации? И вообще возможно сделать такого рода авторизацию? Соц. сети возвращают разные данные в $this->_identity, но как ими воспользоваться я незнаю, и где взять пароль?
Вместо
можно генерировать логин вроде
И также составить какой-нибудь пароль для таких случаев.
Но для корректной работы нужно чтобы пользователи хранились в таблицах. То есть можно переопределить EAuthUserIdentity так, чтобы он для каждого нового посетителя находил или создавал пользователя User (почти как стандартный UserIdentity). В модель User можно добавит поля service и eauthid и параллельно заполнять username и password автоматически сгенерированными данными. И не забыть запретить авторизацию этим пользователям через обычную форму входа.
Спасибо! Полезный материал. Сделал то же самое для Yii2, пришлось немного подправить. Хотел бы перейти на phpBB 3.1.x, но сильно изменилась архитектура, простыми решениями не выходит. У вас нет случайно такого опыта, с интеграцией на новую версию форума?
Новый не смотрел. Не приходилось.
У меня не Yii, но phpbb(ex) и я пошел несколько по другому пути. Я не стал ломать CMS ни форум и сращивать их в котопса, а просто настроил репликацию данных. В моём случае всегда возможен разрыв связи, замена любого из элементов и менее болезненный апгрейд любого из элементов.
Нагрузка на элементы минимальна, код минимален, так как интеграция решена средствами СУБД. В коде элементов изменения только в части единообразного сессионного механизма и образования хешей паролей.
Здравствуйте! Регистрация получилось спасибо за статью А вот авторизация не работает тоесть не соединилось Никаких ошибок не выводить В чем может быть проблема
3 статьи и 3 видеоурока по установке и переносу phpBB на хостинг
1. Перенос CMS phpBB на хостинг cPanel:
статья https://shneider-host.ru/blog/Perenos-cms-phpbb-na-hosting-cpanel.html
видеоурок https://www.youtube.com/watch?v=80T8MVPjX_M
2. Установка phpBB через Softaculous на cPanel:
статья https://shneider-host.ru/blog/Ustanovka-phpbb-cherez-softaculous-na-cpanel.html
видеоурок https://www.youtube.com/watch?v=YMb1w1Wz5xY
3. Установка phpBB на хостинг cPanel из исходников:
статья https://shneider-host.ru/blog/Ustanovka-phpbb-na-hosting-cpanel-iz-ishodnikov.html
видеоурок https://www.youtube.com/watch?v=xhq--13tU9U
Сделал по инструкции.
При авторизации на сайте функция ,
user_login - возвращает SUCCESS ,
куки форума создаются
но авторизации на самом форуме не происходит т.е форма запрос пароля так и весит
куда копать ?
Спасибо, разобрался
Вот бы еще под yii2 такой мануальчик.
А нет решения с yii2 ? Чтобы быстро и безболезненно? А то сроки жим жим ))
Вроде было. Может у Вас заработает.
ucp_profile_profile_info.html и ucp_profile_avatar.html можно не менять и редирект через htaccess тоже не надо. Все это можно просто отключить в админке как модуль, и в навигации оно не будет отображаться