dokuwiki 是一套我很喜歡的迷你 wiki 系統,他的特色包括輕巧又有足夠的功能、檔案以純文字撰寫等。
因為目前所架設的 Minecraft 伺服器有採用 AuthMe 驗證系統,因為要在遊戲裡面註冊帳號實在是很麻煩,因此很早以前就寫了個網站方便更改資料、註冊帳號。但是 wiki 也需要帳號,考量到使用者編輯的需要,每次都要使用者一直註冊帳號實在是很不方便,因此就嘗試結合 dokuwiki 的認證機制,讓使用者可以使用同一組帳號密碼登入遊戲與網站。
dokuwiki 支援各種登入驗證方式,預設是採用 plaintext,也就是密碼 hash 之後存在純文字檔案中。由於 AuthMe 是採用 MySQL 作為後台,因此我們就以 mysql_class.php 這個 MySQL 範例檔案來修改。
新建一個 local.protected.php 於 conf 資料夾中,這樣設定檔才不會被自動設定蓋掉。同時從 /conf/mysql.conf.php.example 可以看到各種應該寫的 MySQL query,我建議直接改名成 mysql.conf.php 然後直接 require 到 local.protected.php 中,這樣升級時就不會被覆蓋。同時,這邊也要搭配 AuthMe 的架構,如果你有更改過資料庫欄位的命名,也要配合調整 query。
由於要自己撰寫 authentication backend,所以將 /inc/auth/mysql.class.php 複製一份,更名為 minecraft.class.php。可以將 minecraft 更改為自己喜歡的名稱,但注意於之後都要使用同樣的 class 名稱。
class auth_minecraft extends auth_basic { //auth_mysql 改成 auth_minecraft ... function checkPass($user,$pass){ //主要驗證的程式 ... return $rc; } }
剩下要改寫的部份其實不多,照著官網提供的資料結構與 AuthMe 給的密碼加密方式 (sha256) 就可以了。這樣就完成最基本的驗證登入,剩下的部份也都照著改寫,應該就沒有問題了。
Reference:
https://www.dokuwiki.org/auth:mysql
https://www.dokuwiki.org/devel:authentication_backends
UPDATED 20130329:
沒想到才過沒多久,Dokuwiki 就改變驗證後台的撰寫方式了 Orz
現在是採用 Authentication Plugin 的方式撰寫,其實跟之前的方法差不多,主要就是要寫一個外掛放在後台這樣子。