7

ユーザーがログインしてコンテンツを表示することを期待するプライベート Mediawiki インスタンスをセットアップしようとしています。Localsettings.php ファイルの $wgWhitelistRead 変数を微調整しようとしましたが、それでも「ログインが必要です」というページが表示されます。ユーザーがログインしていない場合、Wiki が Special:userLogin にリダイレクトされるようにしたいのですが、どうすればよいですか?

mwforums で同様の質問を見つけましたが、古いバージョンの mediawiki 用のようです。何か案は?

4

2 に答える 2

12

これを行うための一見自然な場所は、OutputPage :: showPermissionsErrorPage()になります。具体的には、実際のエラーメッセージは次の2行に表示されます。

$this->prepareErrorPage( $this->msg( 'loginreqtitle' ) );
$this->addHTML( $this->msg( $msg )->rawParams( $loginLink )->parse() );

Special:UserLoginに直接リダイレクトするには、次のような(テストされていない!)コードに置き換えることができます。

$this->redirect( SpecialPage::getTitleFor( 'Userlogin' )->getFullURL( $query ) );

残念ながら、拡張機能からこれを実行できる便利なフックはないようです。そのため、コードにパッチを適用する必要があるようです。これはフックの自然な場所のように見えるので、そのようなフックを追加するように要求する機能要求を提出することは悪い考えではないかもしれません。

(または、ログインフォームを所定の場所に出力することもできますが、Special:UserLoginにリダイレクトするよりも、実装が少し難しい場合があります。一見すると、呼び出すのに便利な「outputLoginForm()」メソッドが見つかりませんでした。Special:UserLoginコードであり、一致するログインフォームを自分で生成することは実際には難しくありませんが、それ以降にフォームを変更すると互換性が失われる可能性があります。)

于 2012-06-21T21:18:59.587 に答える
1

特に恐ろしいハックとして、ログインが必要なときに表示されるメッセージ (メッセージであるべき) にログインフォームを入れることができますloginreqpagetext。アンチ CSRF 保護のために自明ではありませんが、AJAX を介して回避できます。(確かにもっと良い解決策があります。これは、それを行うための迅速で汚い方法です。)

于 2012-06-21T18:45:40.300 に答える