MODX RevolutionとphpBBフォーラムの束

2012年11月6日に更新。

以前のバージョンでは、それはあまりうまく行われず、水の下から石が引き出されました。

2012年11月7日に更新。

マイナーなバグ修正

2012年11月13日更新。

ファイル/forum/includes/auth/auth_modx.phpのみが修正されます:



PhpBBバージョン: 3.0.11

MODXバージョン: 2.2.5-pl



サイトフォルダー: /

フォーラムフォルダー: /フォーラム



私のデータベースは異なりますが、すべてがうまくいくように、データベースも使用できます。



承認はほぼ完全にMODX側で行われます。 フォーラムはMODXユーザーのコピーを作成しますが、データはMODXから自動的に更新されます。





PhpBB認証プラグイン



フォーラムでの承認には、「承認プラグイン」のシステムが使用されます。



認証プラグインを使用するには、次のことを行う必要があります。



1.承認プラグインの名前を考えます。例:modx

2.ファイル/forum/includes/auth/auth_modx.phpを作成します(ファイル名の接尾辞(modx)==プラグイン名)

3.ファイル/forum/includes/auth/auth_modx.phpには、少なくとも1つのlogin_modx関数が必要です(サフィックス==プラグイン名)

4.フォーラムで登録を無効にします。一般->ユーザー登録->登録を無効にします

5.フォーラムの管理パネルで:一般->認証->リストからModxを選択します



ファイルコード/forum/includes/auth/auth_modx.php:
<?php # /forum/includes/auth/auth_modx.php if (!defined('IN_PHPBB')){ exit; } /** *      */ function get_user_data(){ //  define('MODX_API_MODE', true); require dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php'; //      /forum // MODX     ,     , //        : set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); //   if($modx->user->get('id') != 0){ //   anonimous $result['username'] = $modx->user->get('username'); $profile = $modx->user->getOne('Profile'); $result['user_email'] = $profile->get('email'); $fields = $profile->get('extended'); $result['user_from'] = (string) $fields['region']; //   ,   NULL,        NULL //      , : // $result['_______users'] = ____modx; //     ,     MODX,    , // :     MODX extended  region,       user_from //     validate_session_modx () } return $result; } /** * ,   . */ function login_modx(){ $auth = get_user_data(); //    if (!is_array($auth) || empty($auth)) { return array( 'status' => LOGIN_ERROR_USERNAME, 'error_msg' => 'ACCESS_DIRECTLY_DENIDED', 'user_row' => array('user_id' => ANONYMOUS), ); } global $db; $sql = 'SELECT user_id, username, user_password, user_email, user_from, user_type FROM ' . USERS_TABLE . " WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($auth['username'])) . "'"; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); if ($row){ foreach($auth as $auK => $auV){ if($row[$auK] != $auV){ //         modx ( ) //  UPDATE unset($auth['username']); $sql = "UPDATE " . USERS_TABLE . " SET " . $db->sql_build_array('UPDATE', $auth) . " WHERE user_id = '" . $db->sql_escape($row['user_id']) . "'"; $db->sql_query($sql); break; } } $res = array( 'status' => LOGIN_SUCCESS, 'error_msg' => false, 'user_row' => array( 'user_id' => $row['user_id'], 'username' => $row['username'], //    'user_email' => $row['user_email'], // E-mail ,   'user_from' => $row['user_from'], 'user_type' => 0, 'group_id' => 2 ) ); return $res; } // ,    . $res = array( 'status' => LOGIN_SUCCESS_CREATE_PROFILE, 'error_msg' => false, 'user_row' => array( "username" => $auth['username'], //    "user_email" => $auth['user_email'], // E-mail ,   "user_from" => $auth['user_from'], "user_type" => 0, "group_id" => 2 ), ); return $res; } /** * ,         . */ function autologin_modx(){ $user_row = login_modx(); //      if ($user_row['status'] == LOGIN_SUCCESS_CREATE_PROFILE) { global $phpbb_root_path, $phpEx; if (!function_exists('user_add')) { include($phpbb_root_path . 'includes/functions_user.' . $phpEx); } $user_row['user_row']['user_id'] = user_add($user_row['user_row']); } //    global $db; $sql = 'SELECT * FROM ' . USERS_TABLE . " WHERE user_id = '" . $db->sql_escape($user_row['user_row']['user_id']) . "'"; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); return $row; } function logout_modx(){ //  modx API define('MODX_API_MODE', true); require dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php'; $modx->getService('error','error.modError'); $modx->runProcessor('/security/logout'); //$modx->cacheManager->refresh(); } function validate_session_modx($locUser){ $auth = get_user_data(); if($locUser['username'] == 'Anonymous'){ if($auth){ return false; }else{ return true; } }else{ //   modx,    ,     if(!$auth){ //    global $user; $user->session_kill(); $user->session_begin(); }elseif(($auth['username'] != $locUser['username'])){ return false; } return true; } } ?>
      
      







フォーラム管理者



承認はほぼ完全にMODX側で行われるため、フォーラム管理者(ユーザー名、adminなど)をMODXに登録する必要があります。



ここで、MODXに管理者ユーザーがおり、フォーラム管理者が同じ管理者名を持っているとします。

問題は、フォーラム管理者が確認できないパスワードを確認する必要があることです。 フォーラムデータベースではなく、MODXでの承認。



画像



したがって、フォーラム管理者のパスワードの追加検証を無効にします。

ファイル:/forum/adm/index.php

 // Have they authenticated (again) as an admin for this session? if (!isset($user->data['session_admin']) || !$user->data['session_admin']) { login_box('', $user->lang['LOGIN_ADMIN_CONFIRM'], $user->lang['LOGIN_ADMIN_SUCCESS'], true, false); }
      
      





変更先:

 // Have they authenticated (again) as an admin for this session? //if (!isset($user->data['session_admin']) || !$user->data['session_admin']) //{ // login_box('', $user->lang['LOGIN_ADMIN_CONFIRM'], $user->lang['LOGIN_ADMIN_SUCCESS'], true, false); //}
      
      





後:

 if (!$auth->acl_get('a_')) { trigger_error('NO_ADMIN'); }
      
      





行を追加:

 $user->data['session_admin'] = 1;
      
      





ログイン、パスワード回復



ファイル/forum/ucp.phpで、フォーラムの承認フォームを使用して、サイトとフォーラムに同時にログインします。

ケース 'login'の間:とbreak; (包括的):

  case 'login': define('MODX_API_MODE', true); require dirname(dirname(__FILE__)) . '/index.php'; $modx->getService('error','error.modError'); set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); if($_REQUEST["username"] and $_REQUEST["password"]){ $data = array( 'username' => $_REQUEST["username"], 'password' => $_REQUEST["password"], 'rememberme' => 1, 'login_context' => 'web', ); $response = $modx->runProcessor('/security/login', $data); if ($response->isError()) { trigger_error($response->getMessage()); } } if ($user->data['is_registered']) { redirect(append_sid("{$phpbb_root_path}index.$phpEx")); } login_box(request_var('redirect', "index.$phpEx")); break;
      
      





ユーザーがフォーラムデータベースにいなくても、自動的に作成されます。



「パスワードを忘れましたか?」リンクをたどるには、フォーラムでMODXパスワード回復ページ(/forum/ucp.php)にアクセスします。



  case 'sendpassword': define('MODX_API_MODE', true); require dirname(dirname(__FILE__)) . '/index.php'; $modx->getService('error','error.modError'); set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); $modx->sendRedirect($modx->makeUrl(865,'','','full')); //  865 -  ID  MODX     break;
      
      





基礎となる記事:

phpbb 3でのサイトとフォーラムユーザーの統合



All Articles