とある案件でMediaWikiを使いWikiサイトを複数立ち上げたいという依頼があり、複数のWikiサイト間でアカウントを共通化するための方法を調べました。

MediaWiki環境

  • バージョン:1.28.0
  • 本番は「aaa.exwiki.com」「bbb.exwiki.com」のようにサブドメインによる複数サイトの運用を想定しているが、今回はとりあえず「exwiki.com/aaa/」「exwiki.com/bbb/」とサブディレクトリで検証。
  • データベースはMySQLで、1つのDB内にプリフィクスを「aaa_」「bbb_」と分けてテーブルを作成済み。

やりたいこと

  • 複数のWikiサイト間でログインのアカウントを1つに集約したい。
  • セッションを共有し、ログイン状態が他サイトでも反映されるようにしたい。

調査結果

MediaWikiの公式ドキュメントを調べた結果、2つの方法が候補として挙がりました。

  1. Shared databaseの方法を使う
  2. CentralAuthのプラグインを使う

1. Shared database

これはユーザーテーブルを共有するための方法で、公式ドキュメントにも新規でサイトを作る場合にはこの後紹介するCentralAuthよりもこちらの方法を推奨していると書かれています。しかし、試してみた結果、ユーザーテーブルは1つに集約することができましたが、セッションの共有ができないことから今回は要件に合わずNGとしました。

2. CentralAuth(プラグイン)

結論から言うと、このプラグインを使うことで実現できました。
ドキュメントに『設定が複雑なのであんまりオススメしない』ようなことが書かれていて使用するのに抵抗感があったのですが、問題なく実現することができました。

CentralAuthの設定方法

ダウンロードとインストール

ここからMediaWikiのバージョンを選択し、ダウンロードURLをコピー。
https://www.mediawiki.org/wiki/Special:ExtensionDistributor/CentralAuth

wgetしてそれぞれのextensionsディレクトリ下に配置。

CentralAuthディレクトリに移動し、central-auth.sqlを実行。(どれか1つのWikiだけでOK。この例だとaaaだけで実行し、bbbでは実行不要)

これでグローバルユーザー用のテーブルが作成されるので、後は設定LocalSettings.phpに設定を記述します。

LocalSettings.phpに追記する内容

これは「aaa」「bbb」それぞれのWikiのLocalSettings.phpに記述します。

7行目の$wgCentralAuthAutoNew以降は何の設定かはっきりしないものありますが、とりあえずドキュメントどおりに記述。サブドメインでの運用の場合は「$wgCentralAuthCookieDomain = ‘.example.org’;」を有効にすれば大丈夫なような気がします。

まとめ

  • MediaWikiの複数サイトでアカウント共有をしたい時はCentralAuthのプラグインを使うのが良い。
  • MediaWikiは情報が少ない。
    ほとんどのドキュメントが英語しか無いのはまだ許せるにしても、英語でも内容が乏しい。ネットで検索してもほとんど引っかからず、Wordpressとかと比較すると本当に残念な感じ。

参考

https://www.mediawiki.org/wiki/Extension:CentralAuth/ja
http://www.cudo29.org/mediawiki.html#multisite_gaccount