Archive for 12月, 2012

結局IEでデータ属性(data-*)は使えるのかテスト

日曜日, 12月 16th, 2012

こんなのに対して

<div id="dataset" data-scalar-test="100" data-object-test='{"key": "value"}'>

それぞれ通常のDOMアクセスとjQuery経由でのアクセスをテスト。

環境

  • jQuery 1.7.2
  • IE6〜8 on WindowsXP & Chrome & Firefox

結果

こんな感じで



var scalar, obj;
var e;

scalar = $('#dataset').data('scalarTest');
obj = $('#dataset').data('objectTest');

alert(scalar);
alert(obj.key);

e = document.getElementById('dataset');
alert(e.getAttribute('data-scalar-test'));
alert(e.getAttribute('data-object-test'));

alert(e.dataset);
alert(e.dataset.scalarTest);
alert(e.dataset.objectTest);

 

みたいなコードを実行。

結果としてIE6〜8で


alert(e.dataset.scalarTest);
alert(e.dataset.objectTest);

のような書き方がNGだった以外は全てOK。
そもそもIEではe.datasetがundefinedになる。

jQuery経由でアクセスする限りIE〜でもdata-*属性は使えそう。

IE9については環境がないので機会があれば試したい。


FuelPHP用ソーシャルログイン専用認証パッケージDsAuthでNinjAuthをもっと簡単に利用する

日曜日, 12月 9th, 2012

FuelPHP Advent Calendar2012参加記事です。
昨日は@fushiroyamaさんのFuelPHPで保守性の高いマルチデバイス対応を考えるでした。
Fuelはコアクラスを拡張してアレコレするのがやりやすいですね。

10日担当の私(@EGMC)は自作の認証パッケージの紹介です。
FuelPHP 勉強会 東京 vol.2でOAuthログインの発表をしてきた」の続きでもあります。

ソーシャル連携のログイン機能

最近のWebサービスにおいてよくみかける「facebookでログイン」、「Twitterでログイン」のような外部サービスを利用したログインの仕組みがあります。
FuelPHPで利用可能なパッケージとしてNinjAuthがありますが、NinjAuthは標準でSimpleAuth、Sentry、Wardenの各ユーザー認証パッケージと連携可能となっています。

標準のSimpleAuthなどをそのまま使っても良いのですが、基本的にどの実装もemail、パスワード項目が必須となっています。

ログイン方法がわからなくなった場合の対応や、ユーザーへの連絡のためにemail、パスワードを設定必須にするというのはサービスによっては大事なことですが、自分が作りたいちょっとした小物webサービスにとってはそもそもアイパス認証なくてもいいかな、ということも多く、かつユーザーテーブルもカスタマイズしたかったので自前で専用の認証パッケージをこさえてみました。

DsAuth

https://github.com/egmc/fuel-dsauth

  • NinjAuthに完全に依存した、IDパスワードによるログイン機能を持たないユーザー認証パッケージ
  • ライセンスはMITで公開しています

動作サンプル

こちらでサンプルページを公開しています。

※実際にログイン可能ですがサンプルなのでアプリは特に何もしません。必要なユーザー情報とトークンは取得しています。

インストール方法

githubで簡単なドキュメントを公開しています。
基本的に必要なパッケージを配置してマイグレーションを実施すれば準備OKです。
ポイントはNinjAuthのAdapterとしてDsAuthを指定することです。

コントローラーは例えば下記のように実装して、fuel/app/classes/controller/auth.phpとして配置します。

<?php
class Controller_Auth extends \DsAuth\Controller {

    public function action_logout() {
        DsAuth::logout();
        Session::set_flash('flash_message', 'ログアウトしました');
        Response::redirect('/');
    }

    public function action_linked() {
        Session::set_flash('flash_message', 'アカウントの紐付けをしました');
        Response::redirect('/');
    }

}

認証情報の取得

ログインに成功するとセッションに取得したユーザー情報が保持されます。
ログイン情報へのアクセスはDsAuthクラスの各静的メソッドを経由して行います。

ログイン状態の確認

// ログインの有無を取得
DsAuth::is_logged_in()

ログインユーザー情報の取得

// ログインユーザーレコードを配列で取得
DsAuth::get_user_info()

なお、DsAuthクラスはFuelのコアクラス同様グローバルにエイリアスされているので、名前空間を都度指定する必要はありません。

指定可能なオプション

  • db_connection dbコネクション
  • login_hash_salt ログインチェック用ハッシュソルト
  • table_columns ログイン時に取得するカラムリスト
  • table_name ユーザーテーブル名
  • always_confirm_username 新規登録時に常にユーザー名を入力させる
  • allow_duplicated_username ユーザー名の重複を許可する
  • auto_modify_userinfo 外部サービスから取得した情報を自動で修正する

今後の予定

  • FuelPHP1.4での確認
  • エラーチェックが甘いのでなんとかする
  • デフォルトのcookieセッションの場合、有効なcookieがが送られるとDBの状態に関係なくログイン状態になってしまうのでそのあたりを考える
  • 小規模サービスで実際に使ってみる

とりあえず動くと思いますが現状はまだ甘い実装となっているので、是非フィードバックを頂ければと思います。