そこで、独自の認証システムを備えたサイトを用意します。 既存のユーザーベースの統合に関する問題に対する迅速な(そしておそらくは正しい)解決策を備えた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; } ?>