Skip to main content.

Saturday, October 20, 2007

Ethnaで販売管理システムを部分的に開発してみる(その2)ログインとセッション

「Ethnaで販売管理システムを部分的に開発してみる」の続きです。今回はログイン(認証)の処理とセッションについてです。以前書いたEthnaの導入(その2)セッションの利用と簡単な認証と同じような方法です。

ログイン画面


今回の処理の流れとしては、以下のようになります。

準備処理
認証用のユーザテーブル(tuser)にユーザIDとパスワードのハッシュ値を登録する。(ハッシュ値の登録にはPHPのMD5関数が使えます。(以前の参考記事)とりあえずということで面倒な場合はそのまま(平文字で)登録して認証の処理でそのまま認証するようにすればいいです。)

ログインからログアウトまで
1. ログイン画面(index.tpl)でユーザIDをパスワードを入力する。
2. ログインアクションでユーザとパスワードを認証する。
3. 認証が出来た場合はセッションを開始してメインメニューの画面を表示する。
4. ログアウト処理でセッションを終了する。

実装は以下のようになっています。

Salesmgr_Tuser
ユーザテーブルのアプリケーションオブジェクトクラスです。

Salesmgr_TuserManager
ユーザテーブルのアプリケーションマネージャクラスです。以下のようにここのauthenticateメソッドでSalesmgr_Tuserを生成して、認証処理を行っています。MD5関数でハッシュ化してチェックしています。テーブルにハッシュ化されずにそのまま格納されている場合は、このMD5関数を使わなければいいです。
class Salesmgr_TuserManager extends Ethna_AppManager
{
    //パスワードの認証
    function authenticate($userid, $password)
    {
        $user =& new Salesmgr_Tuser($this->backend, 'userid', $userid );
    
        if( $user->isValid() ){

            $passmd5 = MD5( $password );

            if( strcmp($passmd5,$user->get('password')) == 0 ){
                return 0;
            }
            else{
                return Ethna::raiseNotice('パスワードが正しくありません', E_INVALID_PASSWORD);
            }
        }
        else{
            return Ethna::raiseNotice('ユーザIDが正しくありません', E_INVALID_USER);
        }
    }
}

Salesmgr_Action_LoginDo
ログインのアクションクラスです。以下のようにSalesmgr_TuserManagerを経由して認証を行っています。
/**
*  login_doアクションの実装
*
*  @access public
*  @return string  遷移名
*/
function perform()
{
    $usermgr =& $this->backend->getManager("tuser");
    $result = $usermgr->authenticate($this->af->get('userid'),$this->af->get('password'));

    if(Ethna::isError($result)) {   
        $this->ae->addObject(null, $result);
        return 'index';
    }

    if( !$this->session->isStart() ) {
            $this->session->start();
    }

    return 'menu_main';
}

Salesmgr_AuthActionClass
Ethna_ActionClassを継承したクラスで以下のようにauthenticateメソッドでセッションが開始されているかどうかのチェックを行っています。セッションが開始されていない場合はログイン画面に移行します。このクラスをログイン以外の全てのアクションの親クラスにします。これでログインしないでアクションの実行が出来ないようになるかと思います。
//
//セッション開始のチェックを追加したEthna_ActionClass
//
class Salesmgr_AuthActionClass extends Ethna_ActionClass
{
    function authenticate()
    {
        //セッションが開始されていなかったらログインから
        if( !$this->session->isStart() ) {
            return 'index'; 
        }

        return parent::authenticate();  
    }
}

まとめ的に
以上の方法はもちろん一例です。認証はテーブルを使わない単純な方法もあれば、本ページ最後のEthnaの書籍には、はてな認証を使った例も出ています。またセッションに関してはここではEthnaに任せていますが、DBで管理する必要が出てくる場合があるかと思います。

次はデータベース関連です。

今回作成したプロジェクト一式は以下からダウンロードしてご覧いただけます。
「Ethnaで販売管理システムを部分的に開発してみる」のプロジェクト一式

当サイトでのEthna関連記事一覧


参考書籍
EthnaPHP [LL???Books] (LL???BOOKS # 2)
EthnaPHP [LL???Books] (LL???BOOKS # 2)
? ? ľ?
?

1,980 (定価)
¥ 1,980 (Amazon価格)
19pt (Amazonポイント)
 (Amazonおすすめ度)
ñ????С
通常24時間以内に発送
(価格・在庫状況は1月6日 17:39現在)


??????~?? (DBMagazine SELECTION)
??????~?? (DBMagazine SELECTION)
?
??

2,520 (定価)
¥ 2,520 (Amazon価格)
25pt (Amazonポイント)
★★★★☆ (Amazonおすすめ度)
ñ
通常24時間以内に発送
(価格・在庫状況は1月6日 17:39現在)