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

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の状態に関係なくログイン状態になってしまうのでそのあたりを考える
  • 小規模サービスで実際に使ってみる

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


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

  1. […] 昨日は@EGMCさんの「FuelPHP用ソーシャルログイン専用認証パッケージDsAuthでNinjAuthをもっと簡単に利用する」でした。 […]

  2. […] FuelPHP 勉強会 東京 vol.3でLTしてきました。参加者の皆様お疲れ様でした。資料は↑。内容的にはAdventCalendarで発表した内容の補足として、簡易デモ、オプションの説明、その他です。興味ある人は是非使って頂いた上でイマイチなところはPR貰えるといいなあと思う所ですがまずは自分で使えって話ではあります。 […]