任意のサイトとのダムphpbb3統合

標準タスクを検討してください-既存のユーザーがいるサイトにフォーラムを追加する必要があります。 この場合、新しいモジュールを自分で作成するのではなく、phpbb3のような既製の人気のあるソリューションを配置し、サイトの登録/承認/ユーザープロファイルをフォーラムと同期します。 最小要件は、サイトユーザーがフォーラムユーザーになり、許可されたサイトユーザーが自動的に許可されたフォーラムユーザーになり、その逆も同様であることです。また、プロファイルを変更すると同期が行われます。



ネットワークにはphpbbとwordpress( WP-United )およびユニバーサルマニュアル( 1、2 )を同期するためのプラグインがありますが、後者は原則として、「functions.phpから20個の関数をコピー」という言葉で始まり、「これら3つのテーブルをここに貼り付けますそのようなデータ。」



別の統合方法は、サイトの残りの部分でphpbbからユーザーテーブルとユーザーメソッドの使用を開始することですが、これには通常、システムの大幅な変更が必要です。



通常より遅い独自の方法について説明しますが、サイトおよびフォーラムファイルへの最小限の変更が必要です(5 kbのシンクロナイザークラスでファイルを接続するために各10行)。



アイデア



どこも簡単です。 サイトにログインします-成功した場合、フォーラムに対応するリクエストを行い、レスポンスからクッキーを入れます。 それだけです (firebugまたはLiveHTTPHeadersを使用して)必要なリクエストを覗き込み、インクルードする場所を見つけることは残っています。



シンクロナイザーは、site-> forum(サイトファイルに含まれる)とforum-> site(phpbbに含まれる)の2つのファイルで構成されます。 これらには、それぞれForumSyncおよびSiteSync静的クラスが含まれています。 各クラス-2つのパブリックメソッド:checkTokenとsync。



私のサイトでは、site->フォーラムシンクロナイザーはforumsync.class.php、forum->サイトはfunctions_sitesync.phpです。 これらのファイル、および変更が必要なファイルは、 ここに投稿されました 。 reqクラスは、一連のクエリの実行にも使用されますここにあります



微妙



1.多くのフォームで、phpbbはcreation_timeおよびform_tokenセキュリティ変数を追加します。 それらの検証はフォーラムにあり、includes / functions.php-> check_form_key()であり、シンクロナイザーが要求されたときにオフにする必要があります。 シンクロナイザークラスでは、秘密キーを定義します。



md5("lala".date("Ymd"))







また、check_form_keyの最初に、特定の変数$ _REQUEST [sync_token]に準拠するためのチェックを追加します(チェックはSiteSync :: checkToken()メソッドで行われます)。



2.ループを回避するために(サイトへのログインがフォーラムへのログインを要求し、サイトへのログインを要求するなど)、要求を送信する前にSiteSync :: checkToken()があれば、この要求はシンクロナイザーによって行われ、同期は開始されなくなりますする必要があります。



詳細



各サイトには独自のサイトがあるため、phpbbファイルで行う必要がある変更のみを説明します。 これは完全なウォークスルーではなく、一般的な原則にすぎません。 ForumSyncクラスとSiteSyncクラスは、サイトごとに個別に変更する必要があります。



登録:簡単にするために、phpbbでのユーザー登録をオフにします(管理パネルから)。 登録はサイト上でのみ行われます。 サイトで登録が成功した場合、ForumSync :: sync( "signup")を呼び出します。 phpbbで、シンクロナイザーの登録を有効にします。これを行うには、フォーラムの先頭の行を変更します。



if ($config['require_activation'] == USER_ACTIVATION_DISABLE && !SiteSync::checkToken())

trigger_error('UCP_REGISTER_DISABLE');







さらに、新しいユーザーのIDを取得すると便利です。 登録が成功した場合に表示されるページのhtmlコードでは、ユーザーIDはどこにも指定されていません。 したがって、以下の行$ user_id = user_add(...)add



if (SiteSync::checkToken()) { echo "<!-- PHPBB_SYNC[user_id=$user_id] -->\n"; }







承認: phpbbでsite->フォーラムを同期するには、何も変更する必要はありません。 逆の場合-フォーラム/ログイン後のlogin_boxのfunctions.php(LOGIN_SUCCESSを確認)に追加



SiteSync::sync("signin",array("username"=>$username,"password"=>$password,"autologin"=>$autologin)).







終了:同期フォーラムの場合->フォーラムのサイト/ ucp.phpの場合 'logout': SiteSync::sync("signout").



行を追加しSiteSync::sync("signout").





パスワードとプロファイルの変更:個別に、サイト上のどのテーブルのユーザープロファイルのどの情報に依存します。 そして、どのような形式のプロファイル編集が存在します。 必要なアクションはフォーラムにあります/ include / ucp / ucp_profile.php-> ucp_profile-> main()、SiteSync :: syncを追加する必要がある対応するケースの終わりに。



弱点



主な欠点は、トランザクションの不足と少なくともプリミティブAPIです。 シンクロナイザーがphpbbにリクエストするときに発生するエラーは、htmlコードで検出する必要があります。 ローカライズに依存しています。



私のシステムではトランザクションがサポートされていますが、phpbbには標準のメカニズムが見つかりませんでした。 たとえば、サイトのパスワードの最小長が6で、phpbbで5で、ユーザーがphpbbに5文字のパスワードを入力すると、phpbbがパスワードを変更すると、サイトでエラーが発生します。 ロールバックを行う必要がありますが、これは「1行追加する」だけではありません。 これまでのところ、このような場合にはシステムが中断するため、一致するすべての同期フィールドの要件を注意深く監視しました。



All Articles