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

最近、phpbb3 Webサイトとフォーラムを迅速に統合する必要が生じました。 グーグル、私は通常の例を見つけませんでした。 私は自分で書かなければなりませんでした。 おそらく誰かが役に立つでしょう。



そこで、独自の認証システムを備えたサイトを用意します。 既存のユーザーベースの統合に関する問題に対する迅速な(そしておそらくは正しい)解決策を備えたphpbbフォーラムを追加する必要があります。 新しいユーザーの承認と登録は引き続きサイトで行われ、既に登録されているユーザーはフォーラムに参加します。 フォーラムへの登録と承認は終了します。



開始するには、新しいユーザーを登録する機能を無効にします。

これを行うには、管理者アカウントの「一般」タブに移動し、左側のメニューで「ユーザー登録」を選択します。 次に、登録をオフにします。



画像



それでは、プラグインの作成を始めましょう。


すべての認証プラグインは、フォーラムサブディレクトリinclude / auth /に保存されます。 標準のauth_dbの他に、すでにいくつかのプラグインファイルがあります。 プラグインを追加します:auth_simpleという名前にします。 ファイル名が含まれる関数の名前を決定することが重要です。 /auth/auth_simple.phpを含むファイルを作成します。



少なくとも、ファイルには機能が必要です



login_simple(&$ユーザー名、&$パスワード)



関数は、このコンテンツの配列を返す必要があります。



array( 'status' => LOGIN_SUCCESS, //   'error_msg' => false, //   'user_row' => array( 'user_id' => $row['user_id'], //   phpbb 'username' => $row['username'], //    'user_password' => $row['user_password'], // phpbb-  'user_email' => $row['user_email'], // E-mail ,   'user_type' => 0, //  (\   ..) 'group_id' => 2 //    ) );
      
      







すべてが明らかであるように見えますが、合理的な質問が発生する可能性があります-ユーザーがまだフォーラムに登録されていない場合、「user_id」を取得する場所は? 答えも簡単です。ユーザーがまだ登録されていない場合は、 'status'キーの値をLOGIN_SUCCESS_CREATE_PROFILEに変更する必要があります。 この場合、ユーザーは自動的に作成されます。



次に、承認プラグインには、ユーザーがフォーラムに最初にアクセスしたときに自動的にフォーラムにユーザーを登録して承認する機能が含まれている必要があります。



autologin_simple()



この関数は、現在のユーザーに関するすべての情報を含む連想配列を返す必要があります。



この例ではこのユーザーを登録するとすぐに言います。



 function get_user_data() { $result['user_email'] = “user@example.com”; $result['username'] = “username”; $result['user_password'] = “user_password”; return $result; }
      
      







実際の場合、この関数は、実際のサイトの現在のユーザーのセッションからデータを転送します。

したがって、プラグインファイルの内容は次のとおりです。


 <?php /** * *     phpBB3 * */ if (!defined('IN_PHPBB')) { exit; } /** *      */ function get_user_data() { $result['user_email'] = “user@example.com”; $result['username'] = “username”; $result['user_password'] = “user_password”; return $result; } /** * ,   . */ function login_simple(&$username, &$password) { $auth = get_user_data(); //    if (!is_array($auth) || empty($auth)) { return array( 'status' => LOGIN_ERROR_USERNAME, //    ACCESS_DIRECTLY_DENIDED     language/<language>/common.php 'error_msg' => 'ACCESS_DIRECTLY_DENIDED', 'user_row' => array('user_id' => ANONYMOUS), ); } global $db; $sql = 'SELECT user_id, username, user_password, user_passchg, user_email, user_type FROM ' . USERS_TABLE . " WHERE username_clean = '" . $db->sql_escape($auth['username']) . "'"; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); if ($row){ $res = array( 'status' => LOGIN_SUCCESS, 'error_msg' => false, 'user_row' => array( 'user_id' => $row['user_id'], 'username' => $row['username'], //    'user_password' => $row['user_password'], // phpbb-  'user_email' => $row['user_email'], // E-mail ,   '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_password" => phpbb_hash($auth['user_password']), // phpbb-  "user_email" => $auth['user_email'], // E-mail ,   "user_type" => 0, "group_id" => 2 ), ); return $res; } /** * ,         . */ function autologin_simple() { //        ,   $u = ""; $user_row = login_simple($u, $u); //      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; } ?>
      
      





参照資料





All Articles