2012-06-20 20 views
7

Tôi đang cố gắng thiết lập một cá thể Mediawiki riêng tư dự kiến ​​người dùng đăng nhập để xem bất kỳ nội dung nào. Tôi đã thử tinh chỉnh biến $ wgWhitelistRead trong tệp Localsettings.php nhưng nó vẫn đưa tôi đến một trang có nội dung "Đăng nhập bắt buộc". Tôi muốn wiki chuyển hướng đến Special: userLogin nếu người dùng chưa đăng nhập. Làm cách nào để thực hiện việc này?Làm thế nào tôi có thể thay đổi trang đích của Mediawiki 1.19.1 để chuyển trực tiếp đến Special: UserLogin

Tôi đã tìm thấy similar question on the mwforums nhưng có vẻ như phiên bản cũ hơn của mediawiki. Bất kỳ ý tưởng?

Trả lời

11

Nơi dường như tự nhiên để làm điều này sẽ là OutputPage::showPermissionsErrorPage(). Cụ thể, thông báo lỗi thực tế sẽ được hiển thị trong hai dòng sau:

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

Để chuyển hướng trực tiếp đến Special: UserLogin, bạn có thể thay thế bằng một cái gì đó như thế này (chưa được kiểm tra!) Mã:

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

Than ôi, có vẻ như không có bất kỳ thuận tiện hook tại chỗ mà sẽ cho phép bạn làm điều này từ một phần mở rộng, do đó, có vẻ như bạn sẽ phải nghỉ mát để vá mã. Điều này trông giống như một nơi tự nhiên cho một cái móc, vì vậy nó có thể không phải là một ý tưởng tồi để file a feature request yêu cầu móc như vậy được thêm vào.

(Ngoài ra, bạn thực sự có thể xuất biểu mẫu đăng nhập tại chỗ, nhưng điều đó có thể phức tạp hơn một chút để thực hiện hơn là chỉ chuyển hướng đến Đặc biệt: UserLogin. Xem nhanh, tôi không thể tìm thấy bất kỳ "outputLoginForm()" thuận tiện nào để gọi trong số Special:UserLogin code và mặc dù không khó để tự tạo biểu mẫu đăng nhập phù hợp, điều đó có nghĩa là bất kỳ thay đổi nào sau đó đối với biểu mẫu có thể làm hỏng khả năng tương thích.)

+0

Cảm ơn! Nó hoạt động như mong đợi. Nhưng điều này sẽ không hiển thị trang userLogin cho mọi quyền hạnGọi không? Điều gì xảy ra nếu điều này được gọi cho một hành động không đủ quyền? –

+0

Nếu bạn nhìn vào các chú thích ở trên cùng của hàm, bạn sẽ lưu ý rằng đường dẫn mã cụ thể chỉ được thực hiện cho trường hợp cụ thể mà người dùng không đăng nhập và có vẻ như việc đăng nhập sẽ khắc phục lỗi. Vì vậy, bạn nên ổn, các lỗi quyền khác sẽ vẫn hoạt động như bình thường. Nếu bạn muốn chắc chắn, bạn có thể bảo vệ một trang và cố gắng chỉnh sửa trang đó với tư cách là người dùng không phải quản trị viên. Hoặc chặn IP của bạn trong một phút. –

+0

Cảm ơn, chỉ là vấn đề nhỏ, các liên kết trong câu trả lời của bạn [OutputPage :: showPermissionsErrorPage()] (https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git;a=blob;f=includes /OutputPage.php#l2063) và [Special: UserLogin code] (https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git;a=blob;f=includes/specials/SpecialUserlogin.php ; h = 13ea5def2ec3e4d9a363440f757675b0099c49e8; hb = refs/heads/REL1_19) không hoạt động nữa. Có thể thay đổi thành https://github.com/wikimedia/mediawiki/blob/master/includes/OutputPage.php#L2454? – escalator

1

Là một hack đặc biệt khủng khiếp, bạn có thể đặt biểu mẫu đăng nhập vào thông báo được hiển thị khi cần đăng nhập (đó phải là thông báo loginreqpagetext). Nó sẽ không tầm thường do sự bảo vệ chống CSRF, nhưng bạn có thể làm việc xung quanh thông qua AJAX. (Có những giải pháp chắc chắn hơn nhiều, đây chỉ là cách nhanh chóng và bẩn thỉu để làm điều đó.)

Các vấn đề liên quan