FuelPHP

FuelPHPのAuthパッケージ

更新日:

今日は、Authパッケージについて調べてみたいと思います。Authパッケージは、複数のドライバに対応可能ですので、自分で認証システムを作成することは可能です。只、あらかじめ用意されているSimpleAuthを拡張して使いこなす方が現実的で、手っ取り早いと思います。以前は、FuelPHPの公式ドキュメントにはtodoの文字しか表示されていませんでしたが、今回チェックしたところかなりの部分が作成されていました。

Authパッケージの基本的なメソッド

  • forge($custom=array())
    指定した認証ドライバやconfigファイルで定義されているドライバをインスタンス化します。引数には、ドライバ名か、ドライバのconfig配列を渡します。値を指定しない場合は、Authの設定ファイルから値が適用されます。
    使用例

    //デフォルトのドライバをインスタンス化します
    Auth::forge();
    //SimpleAuthをインスタンス化します
    Auth::forge('simpleauth');
    //複数のドライバを配列でセットします
    Auth::forge(array('driver'=>'simpleauth' ,'id'=>'customid'));
  • instance($instance=null)
    ロードされたドライバインスタンスを取得します。複数のドライバをconfigで設定している場合、最初にロードされるドライバがデフォルトになります。引数をNULL値で指定すれば、デフォルトのドライバが指定されます。特定のドライバを取得するにはドライバのidを指定します。
    使用例

    //デフォルトのドライバをログアウトします
     Auth::instance()->logout();
     //ユーザー名とパスワードでSimtpAuthドライバをログインします
     Auth::instance('simpleauth')->login(Input::post('username'),Input::post('password'));
  • unload($driver_id=null)
    ロードされたドライバインスタンスを削除します。引数がNULL値の場合、デフォルトのドライバインスタンスが削除されます。アンロードが成功した場合はture、失敗した場合はfalseが返ります。
    使用例

    //デフォルトドライバが削除されます
     Auth::unload();
     //SimpleAuthドライバが削除されます
     Auth::unload('simpleauth');
  • check($specific=null)
    全てのロードされたログインドライバか指定されたパラメータをチェックします。
    使用例

    //もしAuthチェックがNGなら
     if( ! Auth::check()){
     Response::redirect('login');
     }
     //特定のAuthドライバをチェックします
     Auth::check('simpleauth');
     //複数のドライバをチェックします
     Auth::check(array('simpleauth','twitter'));
  • verified($specifi=null)
    特定の検証ドライバ又は、全ての検証ドライバを取得します。全ての検証ドライバを配列で指定するか、特定のドライバidを指定します。
  • logout()
    全ての現在ログイン中のドライバをログアウトします。
  • register_driver_type($type,$check_method)
    新しいドライバタイプを登録します。第1引数は、認証ドライバの型、第2引数は、検証に使用するドライバメソッドを指定します。
  • unregister_driver_type($type)
    指定するタイプの検証ドライバを削除します。

独自のドライバ

独自のドライバを作成するには、2つの方法があります。Authドライバクラスを拡張して作成するか、SimpleAuthクラスを拡張して、必要に応じて、それらを変更して作成します。

Authドライバは下記の3つのタイプから構成されています。

  • Login(Auth_Login_Driver)
  • Group(Auth_Group_Driver)
  • Acl(Auth_Acl_Driver)

Authクラスの継承

Authクラスは、下記のように継承します。

<?php
 class Auth_Login_MyDriver extends \Auth\Auth_Login_Driver{
 //ここに独自ドライバクラスの関数や変数を実装します
 }

Auth_Login_Driver

このドライバは、全ての認証ログインドライバの基底クラスです。 このドライバは、全てのログインドライバが実装しなければならない全てのメソッドに含まれている抽象クラスとして定義されています。下記に代表的なメソッドを記述します。

  • get_id()
    get_idメソッドは、ドライバ固有のIDを返します。このメソッドは、ドライバを識別したり、特定のドライバインスタンスを取得するために使用することが出来ます。
    使用例

    //戻り値'simpleauth'を返します
     $id=Auth::instance('simpleauth')->get_id();
  • set_config(キー、値)
    ドライバに値をセットします。第1引数に、設定キーの名前を指定します。第2引数は、設定キーの値を指定します。
    使用例

    //'key'名のキーに、'value'名の値をセットします。
     Auth::instance()->set_config('key','value');
  • get_config(キー、既定値=null)
    指定した設定キーのドライバの設定値を取得します。 指定したキーが存在しない場合、第2引数が返されます。第2引数を省略するとNULL値が返されます。
    使用例

    //指定したキーの値が返されます。キーが存在しない場合はfalseが返されます。
     $key=Auth::instance()->get_config('key',false);
  • guest_login()
    ゲストログインをサポートしている場合、ドライバはゲストログインを返します。ゲストログインをサポートしていない場合はfalseを返します。
    使用例

    //デフォルトインスタンスがゲストログインをサポートしていたら
     if(Auth::instance()->guest_login()){
     //ここにゲストログイン用のコードを記述します
    }
  • get_user_array(取得するフィールドの追加配列)
    現在ログイン中のユーザー情報の配列を取得します。そのユーザー情報の中には、最低限、screename(ログインユーザー名?)とEmailアドレスは含まれます。追加のフィールドはconfigドライバで指定するか、引数に配列として指定します。尚、その追加情報を取得するには、そのドライバの中にget_user_fieldname()メソッドを持っている必要があります。
    使用例

    //デフォルトドライバで指定されているユーザー情報を取得します。
     //デフォルトドライバで何も指定されていなければ、screennameとemaiaddressを取得します。
     $user=Auth::instance()->get_user_array();
     //SimpleAuthでユーザー情報を取得します。
     $user=Auth::instance('simpleauth')->get_user_array();
     //もしverify_multiple_loginsがfalseにセットされていれば、静的に呼び出すことが出来ます。
     $user=Auth::get_user_array();
  • hash_password(パスワード)
    指定したパスワードをbase64でエンコードされたハッシュ値を返します。このメソッドは非常に安全なpbkdf2ハッシュアルゴリズムを使用します。
    使用例

    //$passwの値をbase64でエンコードしたハッシュ値を返します。
     $password=Auth::instance()->hash_password($passw);

 抽象メソッド

あなたが開発する全てのログインドライバは下記に記述する全てのメソッドを提供する必要があります。

  • perform_check()
    現在のユーザーの有効なセッションがあるかどうかを確認する内部クラスメソッド。決定方法は自由に設定することが出来ます。このメソッドはAuth::check()メソッドで呼び出されます。アプリケーションで直接呼び出されることはありません。
  • validate_user()
    このメソッドはログイン要求を検証するために使用します。検証方法は自由に決定することが出来ます。
  • login()
    このメソッドは、ログイン要求を実行するために使用します。この要求を検証するためにvalidate_userメソッドを呼び出す必要があります。ログイン方法は自由に決定することが出来ます。
  • logout()
    このメソッドは、現在のログインユーザーをログアウトするために使用します。ログアウト方法は自由に決定することが出来ます。
  • get_user_id()
    このメソッドは、 現在ログインしているユーザーのID値を含む配列構造体を返します。
  • get_groups()
    このメソッドは、現在ログイン中のユーザーに割り当てられたユーザーグループを返します。
  • get_email()
    このメソッドは、現在ログイン中のユーザーのemailアドレスを返します。
  • get_screen_name()
    このメソッドは、現在ログイン中のユーザーのスクリーン名(ニックネーム)を返します。

Auth_Group_Driver

このドライバは、全ての認証グループドライバの基底クラスです。このドライバは、全てのグループドライバ、及び任意のグループドライバが実装しなければならない全てのメソッドの抽象クラスとして定義されています。

ドライバの設定

グループドライバは、このドライバが依存する追加ドライバ(基本的にACLドライバ)をロードすることが出来ます。しかし、カスタムドライバを実装することも出来ます。

使用例

//このグループドライバを読み込むときにSimpleACLを自動読み込みします。
 protected $config=array(
 'dreivers'=>array('acl'=>array('SimpleAcl'))
 );

Genericメソッド

Genericメソッドは、グループベースのドライバで定義され、継承により全てのグループドライバを使用可能にします。これらのメソッドは基底グループと相互作用するために、アクセスをチェックする機能を提供します。

  • get_id()
    get_idメソッドは、ドライバ固有のIDを返します。このメソッドは、ドライバを識別したり、特定のドライバインスタンスを取得するために使用することが出来ます。
    使用例

    //戻り値'simpleauth'を返します
     $id=Auth::instance('simplegroup')->get_id();
  • set_config(キー、値)
    ドライバに値をセットします。第1引数に、設定キーの名前を指定します。第2引数は、設定キーの値を指定します。
    使用例

    //'key'名のキーに、'value'名の値をセットします。
     Auth::instance('simplegroup')->set_config('key','value');
  • get_config(キー、既定値=null)
    指定した設定キーのドライバの設定値を取得します。 指定したキーが存在しない場合、第2引数が返されます。第2引数を省略するとNULL値が返されます。
    使用例

    //指定したキーの値が返されます。キーが存在しない場合はfalseが返されます。
     $key=Auth::instance('simplegroup')->get_config('key',false);
  • has_access(条件,ドライバ,グループ=null)
    このメソッドは、指定されて条件に従って、ユーザーのアクセス権を確認するために定義されたACLドライバを使用します。 第1引数の条件は、必須項目で、文字列又は、配列で指定します。第2引数はドライバ名を指定します。必須項目ですが、NULL値を指定した場合、全てのドライバがアクセスチェックのために呼び出されます。アクセスが許可されたらtrue、許可されなかったら、falseを返します。
    使用例

    //コメントの作成が許可されていなければ
     if( ! Auth::instance('simplegroup')->has_access('comment.create',null)){
     //'no_admin'へ移動
     Response::redirect('no_admin');
     }
     //ユーザーがコメントを更新、削除できる場合
     Auth::instance('simplegroup')->has_access('comment.[update,delete]',null);
     //デフォルトグループのインスタンスを使って、静的に呼び出します
     Auth::has_access('comment.[update,delete]');
     //文字列のハイオ列を使って指定することも出来ます
     Auth::instance('simplegroup')->has_access(array('comment',array('update','delete')),null);

抽象メソッド

あなたが開発する全てのグループドライバは下記の全てのメソッドを提供する必要があります。

  • member(グループID,特定のドライバ=null)
    このメソッドは、 指定された全てのグループのID、又は、第2引数で指定された特定のドライバ又は、配列で指定されたドライバのメンバーであるかどうかを検証します。
    使用例

    //もしメンバーのIDが100で無ければ
     if(! Auth::member(100)){
     //'no_admin'へリダイレクトします。
     Resopnse::redirect('no_adimi');
     }
     //特定のグループドライバを指定
     Auth::member(1,'simplegroup');
     //複数のグループドライバを指定
     Auth::member(0,array('simplegroup','genericgroup'));
  • get_name(グループ)
    このメソッドは指定したグループの表示名を取得します。
    使用例

    //管理者グループの表示名を取得
     Auth::instance('simplegroup')->get_name('admin');

Auth_Acl_Driver

このドライバは、全てのACLドライバの基底クラスです。このドライバは全ての任意のドライバが実装しなければならない全てのメソッドの抽象クラスとして定義されています。

Genericメソッド

GenericメソッドはACLのベースドライバで定義され、継承することにより全ての認証ACLドライバで使用できるようになります。これらのメソッドは得手のACLを使用して対話するための、アクセスをチェックする機能を提供します。

  • get_id()
    get_idメソッドは、ドライバ固有のIDを返します。このメソッドは、ドライバを識別したり、特定のドライバインスタンスを取得するために使用することが出来ます。
    使用例

    //戻り値'simpleauth'を返します
     $id=Auth::instance('simplegroup')->get_id();
  • set_config(キー、値)
    ドライバに値をセットします。第1引数に、設定キーの名前を指定します。第2引数は、設定キーの値を指定します。
    使用例

    //'key'名のキーに、'value'名の値をセットします。
     Auth::instance('simplegroup')->set_config('key','value');
  • get_config(キー、既定値=null)
    指定した設定キーのドライバの設定値を取得します。 指定したキーが存在しない場合、第2引数が返されます。第2引数を省略するとNULL値が返されます。
    使用例

    //指定したキーの値が返されます。キーが存在しない場合はfalseが返されます。
     $key=Auth::instance('simplegroup')->get_config('key',false);

抽象メソッド

あなたが開発する全てのACLドライバは下記の全てのメソッドを提供する必要があります。

  • has_access(条件,array($entity))
    このメソッドは、指定された条件に従って、ユーザーのアクセス権を確認するために定義されたACLドライバを使用します。第1引数の条件は、文字列又は配列で指定します。 第2引数は、ユーザー又は、グループ識別子を配列の形式で指定します。
    使用例

    //ユーザーがコメントを許可されていない場合は
     if ( ! Auth::instance('simpleacl')->has_access('comments.create'),array('simplegroup',1)){
     //'no_admin'へ移動します
     Response::redirect('no_adimin');
     }

SimpleAuth

SimpleAuthは、その名が示すように、Authパッケージに含まれている単純な認証システムです。独自のドライバを構築する場合に、リファレンスとしてこれを使用することが出来ます。

Authのセットアップ

設定は、SimpleAuthドライバを使用するAuthパッケージに行う必要があります。設定方法は、『FuelPHPで簡単認証システム 』で紹介していますので、省略いたします。

SimpleAuthの設定値を下記に記述しておきます。app/configにコピーしたsimpleauth.phpを修正することによって設定値を変更します。

  • db_connection
    使用するデータベースの接続名を指定します。null値を指定しておけば、app/configのdb.phpの設定値を適用します。
  • table_name
    使用するユーザーテーブル名を指定します。初期値はuserです。
  • table_columns
    使用するテーブルカラム名を指定します。初期値は、arry('*')です。最低限必要項目は、『username』『password』『email』『last_login』『login_hash』『group』『profile_fields』です。
  • guest_login
    ゲストログインを使用するかどうかを指定します。初期値はtrueです。
  • groups
    使用するSimpleAuthグループドライバを指定します。
  • roles
    使用するロール(役割)を配列で指定します。SimpleAuthのACLドライバで定義されています。
  • login_hash_salt
    ログイン用のハッシュソルトを指定します。ここにランダムな文字列を指定することにより、パスワードのハッシュ値を計算する為の文字列の一部として使用されます。
  • username_post_key
    ユーザー名を含むログインフォームの入力フィールドの名前を指定します。初期値はusernameです。
  • password_post_key
    パスワードを含むログインフォームの入力フィールドをの名前を指定します。初期値はpasswordです。

クラスのメソッド

  • validate_user(ユーザー名又はメールアドレス,パスワード)
    このメソッドは、ログインの要求を検証します。このメソッドは有効な資格情報としてメールアドレスとユーザー名の両方をサポートしています。 検証NGの場合はfalseを、検証OKの場合は、ユーザー情報の配列を返します。
  • login($username_or_email='',$password='')
    このメソッドはログインの要求を実行します。このメソッドは実行する前にvalidate_userメソッドを呼び出して検証をします。
  • force_login($user_ids='')
    このメソッドは強制的にログイン要求を実行します。remember me機能として使用することが出来ます。
  • loguout()
    ログインしているユーザーをログアウトします。
  • create_user($username,$password,$email,gruoup=1,Array $profile_fields=array())
    このメソッドは、指定した条件で、新しいユーザーレコードを作成します。作成に成功した場合はユーザーレコードのIDを返し、失敗した場合はfalseを返します。
  • update_user($value,$username=null)
    このメソッドは、ユーザーレコード内の値を更新します。
  • change_password(旧パスワード,新パスワード,ユーザー名)
    このメソッドは、指定した内容でパスワードを変更します。
  • reset_password($username)
    このメソッドは指定したユーザーにランダムなパスワードを割り当てます。
  • delete_user($username)
    このメソッドは指定したユーザーのアカウントを削除します。
  • create_login_hash()
    このメソッドは、現在ログイン中のユーザーの新しいログインハッシュを生成します。
  • get_user_id()
    このメソッドは、現在ログイン中のユーザーのIDを含む配列構造体を返します。ログインユーザーがいなければ、falseを返します。
  • get_groups()
    このメソッドは、現在ログイン中のユーザーに割り当てられたユーザーグループを返します。
  • get_email()
    現在ログイン中のユーザーのEメールアドレスを返します。
  • get_screen_name()
    現在ログイン中のユーザーのスクリーンネーム(表示名)を返します。
  • get_profile_fields()
    現在ログイン中のユーザーのプロファイルフィールドを配列で返します。
  • guest_login()
    このメソッドは、ゲストログインが有効かどうかをチェックすることが出来ます。

SimpleAuth Group

  •  member(グループ名,ユーザー名)
    このメソッドは、ユーザーが指定したグループのメンバーかどうかをチェックします。 第2引数のユーザー名を省略すると、現在ログインしているユーザーをチェックします。trueかfalseを返します。
  • get_name(グループID)
    指定したグループIDの名前を取得します。
  • get_roles(グループID)
    グループIDに定義されているロールを取得することが出来ます。

SimpleAuth Acl

  • has_access(条件)
    このメソッドは、現在ログイン中のユーザーが指定した条件の権限を持つ特定の場所へのアクセス権を持っているかどうかをチェックします。

本日は以上です。

-FuelPHP
-

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.