DokuWiki

It's better when it's simple

ユーザ用ツール

サイト用ツール


サイドバー

この翻訳は元のページよりも更新日が古く、内容が古い可能性があります。 変更点を参照して下さい。
このページの翻訳?:

DokuWiki について知る

開発

法人利用

我々のコミュニティ


FacebookTwitterや他のソーシャル・ネットワークからフォローしてください。

ja:devel:authentication_backends

独自の認証バックエンドを作るには?

DokuWikiの認証システムは高度にモジュール化されており、PHPならば別のプログラムで認証させることもできます。

もし、提供されているauthの中にあなたが欲しいものがなければ、自作することが出来るのです。バックエンドはinc/authディレクトリに格納され、<backend>.class.phpという名前が付けられなければなりません。<backend>は認証バックエンドの名前です。このファイル内で、auth_<backend>という名前のクラスを定義します。あなたの自作クラスは、既存のバックエンドを継承するか、inc/auth/basic.class.phpで定義されているauth_basicクラスを継承してください。

あなたのクラスの中では、2,3のメソッドといくつかのパブリックフィールドをbase classからオーバーライドする必要があります。それらについて以下に記述しますが、base classソースコードのコメントにも目を通してください!

また、あなたが新しいバックエンドを開発したら、コミュニティでコードを共有しましょう!

必須のフィールド

$success

これはboolean値です。あなたのモジュールが正しく初期設定できた場合は、コンストラクタでtrueにセットします。何か問題があった場合にはfalseをセットしてフロントエンドに異常を知らせます。

$cando

これはboolean値の連想配列です。あなたのバックエンドが提供するすべての機能にtrueをセットします。$candoのキー値は次のようになっています。

addUser ユーザーを作成できるか?
delUser ユーザーを削除できるか?
modLogin ログイン名を変更できるか?
modPass パスワードを変更できるか?
modName 本名を変更できるか?
modMail E-mailを変更できるか?
modGroups グループを変更できるか?
getUsers (絞り込んだ)ユーザーリストを取得できるか?
getUserCount ユーザー数を取得できるか?
getGroups 利用可能なグループのリストを取得できるか?
external モジュールは外部で認証を実行できるか?
logoff モジュールは特殊なログオフ方法を持っているか?

必須のメソッド

必須なメソッドは2つだけです。さらに他のメソッドも自作することで、より多くの機能が実装できます。

コンストラクタ

もちろん、クラスのインスタンス化にコンストラクタは必要ですね。:-) 上で挙げたフィールドをここで設定します。

checkPass()

このメソッドは与えられたユーザーが存在し、与えられた平文テキストパスワードが正しいかどうかをチェックします。

getUserData()

このメソッドはE-mailアドレスや本名といった、ユーザー情報を返します。

その他のメソッド

これらのメソッドはオプションで、candoフィールドで指定されているものだけ呼び出されます。

trustExternal()

もし $cando['external'] が True の場合、このメソッドがユーザー認証に使用されます。また、認証に関するDokuWiki内のコードはまったく利用されません。

このメソッドはサードパーティのクッキーやApacheの認証メカニズムを使って認証する場合に使用され、inc/auth.php内のauth_login()メソッドを置き換えます。

このメソッドの使用例として、punbbバックエンドを見てみてください。

このメソッドさえ実装されれば、あなたのモジュールから他のメソッドを省くことができます。(コンストラクタ以外のメソッドも省略できます)

punbbを例にすると、trustExternal() メソッドは次のようなグローバル変数を設定しています。
$USERINFO['name']
$USERINFO['mail']
$USERINFO['grps']
$_SERVER['REMOTE_USER']
$_SESSION[DOKU_COOKIE]['auth']['user']
$_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;

for a description of the $USERINFO variables see the documentation of the GetUserData function.
Do not forget to add 'global $USERINFO' to the start of this function, to make the variable accessible. Another thing to to keep in mind if you're implementing Single Sing On based on a cookie, is that if you want to be able to use DokuWiki's login form when SSO cookie is not present, you need to set that cookie once you verify the credentials, so on next page load you can authenticate based on that SSO cookie as $user and $pass variables will be empty since login form is not submitted. In punbb this is done with pun_setcookie() function call.

logOff()

もし、$cando['logoff'] が true の場合、このメソッドはDokuWikiのログオフイベント発生時に呼び出されます。クッキーの消去など、ログオフ時に必要な処理を実行するために用います。おそらくtrustExternalを使う場合に便利でしょう。

createUser()

与えられたデータでユーザーを新規作成する。

modifyUser()

ユーザーデータを変更する。

deleteUser()

一人以上のユーザーを消去する。

getUserCount()

特定の条件に合ったユーザーの数を取得する。

retrieveUsers()

特定の条件に合ったユーザーのユーザーデータを取得する。

addGroup()

新しいグループを作成する。

retrieveGroups()

利用可能なすべてのグループのリストを取得する。

ja/devel/authentication_backends.txt · 最終更新: 2014-02-27 17:27 by Klap-in