0:00
 
Window Title
 
 
 
 
 
 
 
 
壁紙の変更

コンピュータ

ネットワーク

ドキュメント

ごみ箱
マイコンピュータ
マイネットワーク
マイドキュメント
ごみ箱

オンラインゲーム

DHTML素材

perl module 忘備録

RFC翻訳

文字コード

 

コンピュータ

ネットワーク


コントロールパネル

perl module 忘備録

CGI::Session::Auth

セッションの認証管理をサポートする

このモジュールは、そのままでは使えない。実際に認証を行なうメソッド_login()は、デフォルトの状態ではユーザ名"guest"、パスワード"guest"しか認証しないようになっている。実際的な認証を行うためには、派生クラスを生成して_login()をオーバーライトする。

認証するユーザ名とパスワードは、デフォルトではCGIオブジェクトの$cgi->param('log_username')と$cgi->param('log_password')に格納されている事が仮定される。log_usernameフィールドとlog_passwordフィールドにユーザ名とパスワードを入力させるようなフォームを作成して使うのが最も簡単である。

使い方:
package MyAuth;

use base qw(CGI::Session::Auth);

sub _login {
    my $self = shift;
    my ($username,$password) = @_;
    if (($username eq 'admin') && ($password eq 'password')) {
        $self->_info("User '$username' logged in");
        $self->{userid} = 'admin';
        $self->_loadProfile($self->{userid});
        return 1;
    }
    0;
}

package main;

use CGI;
use CGI::Session;
use MyAuth;
// CGIオブジェクトを生成する。
my $cgi = new CGI;
// CGI::Sessionオブジェクトを生成する。
my $session = CGI::Session->load($cgi);
if ($session->is_expired) {
    // セッション期限切れなので、新しいセッションを作って再認証の要求をする
    // 注:cookieの期限がセッション期限以下の場合は、ここには来ない。
}
elsif ($session->is_empty) {
     $session = new CGI::Session($cgi);
}
// CGI::Session::Authオブジェクトを生成する。
my $auth = new MyAuth({CGI => $cgi, Session => $session }):
// 未認証の場合は、log_usernameとlog_passwordで認証する
// 同じセッション内で認証済みであれば、インスタンスを認証済み状態にする
$auth->authenticate();
if ($auth->loggedIn) {
    // ログイン成功
    // (同じセッション内で認証済みの場合でも)
    // authenticate() を実行しないと、このメソッドは正しい結果を返さないので注意。
}
else {
   // ログイン失敗
}

その他使いそうなメソッド:

my $session = new CGI::Session::Auth({CGI => $cgi, Session => $session, IPAuth => 1});
認証メソッドとして_login()ではなく、_ipAuth()を使用する。
このメソッドは、ソースを読んでも適当な見本が書かれていないが、恐らく引数としてIPアドレスが渡されてくるものと思われる。_login()と同様、デフォルトでは何もしないので、派生クラスでオーバーライトしなければならない。

my $session = new CGI::Session::Auth({CGI => $cgi, Session => $session, LoginVarPrefix => $prefix});
例えば、$prefixに'my'が格納されていたら、ユーザ名・パスワードをチェックするCGIパラメタがlog_username,log_passwordからmy_logname,my_passwordに変わる。

my $session = new CGI::Session::Auth({CGI => $cgi, Session => $session, Log => 1});
Log::Log4perlを使用してログを出力する。認証ログをsyslogに出力する事もできそう。

$auth->_loadProfile($username);
_login()の中から呼び出して、$auth->{$key}にユーザプロファイルを設定する。キーは任意の文字列を使用可能。デフォルトでは何もしないので、派生クラスでオーバーライトする。

$auth->hasUsername($username);
$usernameが認証済みならtrueを返す。

$auth->logout();
認証を取り消して、ログアウト状態に戻す。

$auth->profile($key);
_loadProfileで設定されたユーザプロファイル$keyの値を取得する。

レディ