Opauth の使用方法

Auth を拡張する Opauth の はじめに で述べたとおり、ラッパークラスは auth.php 設定ファイルで構成されたドライバに基づいて、自動的に Simpleauth または Ormauth のいずれかに設定されます。

認証フレームワークで独自のドライバセットを登録し、 Simpleauth または Ormauth のドライバを使用しない場合でも、 あなたはまだ Opauth 統合クラスを使用することができますが、マイグレーション 008 で定義された 'providers' のテーブルを手動で作成する必要があります。 あなたは独自のドライバセットに好きな名前を付けることができます。また、カスタムログインドライバは Simpleauth とプロトタイプ互換がある Auth::check()Auth::instance()->get_user_id()Auth::instance()->force_login()Auth::create_user() のメソッドを提供する必要があります。これらがないと、 Opauth 統合クラスは動作しません。

実行時の設定

Opauth の設定の大部分は、設定ファイルの opauth.php を介して行われ、そして、そのファイル内のすべてのオプションは、 $config 配列を使用して、 forge() に新しい値を渡すことにより実行時に変更することができます。 これに加え、設定ファイルではサポートされず実行時にのみ渡すことができるいくつかの設定値が存在します:

パラメータ デフォルト 説明
table string
自動検出
手動でプロバイダ情報を含むテーブルの名前を定義することができます。 このテーブルの名前は Simpleauth または Ormauth を利用する場合は自動的に検出されます。 カスタム認証ドライバセットを利用し手動でテーブルを作成した場合は、すべての生成時の呼び出しでこのテーブル名を渡す必要があります。
path string
自動検出
あなたの OAuth 認証を行うコントローラのメソッドへの URI パス。 デフォルトでは、 Opauth オブジェクトを生成したときの現在のパスが設定されています。
callback_url string
自動検出
OAuth プロバイダのコールバックを処理するコントローラメソッドへの URI パス。デフォルトでは、 path が指す同じコントローラ内の 'action_callback' または 'get_callback' メソッドを呼び出すように設定されています。
provider string
自動検出
手動で path を設定している場合、OAuthプロバイダの呼び出しの自動検出が機能しないため 手動でプロバイダ名を定義する必要があります。これは大文字と小文字が区別され、ストラテジープロバイダの利用時と設定ファイルの opauth.php でストラテジーの定義をするために利用するキーは一致しなければなりません。

Simpleauth または Ormauth を利用しており、あなたのアプリケーションが Opauth を統合するためコード例に従っている場合は、 これら実行時の設定値はいずれも必要がありません。自動検出した値でうまく動きます。

クラスメソッド

forge($config = array(), $autorun = true)

forge メソッドは Auth_Opauth クラスのインスタンスを作成し、アプリケーションに OAuth の統合を提供します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$config
array()
インスタンスに渡したい任意の実行時の設定値
$autorun
true
true の場合、自動的に OAuth プロバイダへの接続を開始します。 false の場合、オブジェクトのインスタンス化のみを行います。
返り値 Auth_Opauth
/**
 * ラッパーがロードされ、 URI に定義されているプロバイダを処理している
 *
 * プロバイダの認証ページにリダイレクトされるため、
 * メソッドの最後の行である必要がある
 */
\Auth_Opauth::forge();

// ランタイム設定を持つオブジェクトを生成
\Auth_Opauth::forge(array(
    'default_group' => $custom_group_id,
));

// ランタイム設定を持つオブジェクトを生成しコールバックを処理
$opauth = \Auth_Opauth::forge(array(
    'default_group' => $custom_group_id,
), false);

カスタム設定を渡さずに、コールバックを処理したい場合は空の配列を渡す必要はなく、 \Auth_Opauth::forge(false); をショートカットとして利用できます。

login_or_register()

The login_or_register メソッドは、プロバイダーのコールバックを処理します。既知のプロバイダの UID が返された場合、 ユーザーは、そのプロバイダに関連付けられているローカルアカウントを利用しログインすることができます。そうでないなら、新しいアカウントの登録、 もしくは、既存のアカウントを利用しログインを行い、そのアカウントと UID を関連付けること、のいずれかをユーザーは求めています。

静的 いいえ
パラメータ なし
返り値 string, ステータスコード。次のステータスコードがサポートされている:
  • 'linked': UID は現在ログインしているユーザーに正常にリンクされた
  • 'logged_in': OAuth のアカウントを使用しユーザーは正常にログインした
  • 'registered': UID は新しく登録されたアカウントにリンクされ、そのユーザーでログインをした
  • 'register': UID は既知ではなく、まだログインしているユーザが存在しないため、ユーザ登録を先に行う
// opauth オブジェクトを取得
$opauth = \Auth_Opauth::forge(false);

// プロバイダのコールバックデータを使用し自動ログインを試す
$status = $opauth->login_or_register();

link_provider メソッドを使用すると、 OAuth ログインに手動でローカルユーザーアカウントをリンクすることができます。 もし、ローカルアカウントを最初に登録し、その後、手動でそのアカウントとプロバイダの UID との間のリンクを作成するためのオプションを、 新規ユーザーに提供したい場合は、この処理が必要となります。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$data
array()
リンクを作成するために必要なすべてのデータの配列 (例を参照)
返り値 作成されたプロバイダリンクレコードの 挿入 ID か、作成に失敗した場合は false
// opauth オブジェクトを取得
$opauth = \Auth_Opauth::forge(false);

// OAuth ストラテジーデータを我々は持っていますか?
if ($authentication = \Session::get('auth-strategy.authentication', array()))
{
	// 現在の認証済みユーザーIDを取得
	list(, $userid) = \Auth::instance()->get_user_id();

	// そして、プロバイダとそれをリンク
	$insert_id = $opauth->link_provider(array(
		'parent_id' => $userid,
		'provider' => $authentication['provider'],
		'uid' => $authentication['uid'],
		'access_token' => $authentication['access_token'],
		'secret' => $authentication['secret'],
		'refresh_token' => $authentication['refresh_token'],
		'expires' => $authentication['expires'],
		'created_at' => time(),
	));
}
else
{
	// 有効なデータがありません、先ほどの OAuth コールバックを受け取っていないように見えます。
}

get($key, $default = null)

get メソッドは Opauth ストラテジーによって作成された生のプロバイダのコールバックレスポンスの構造に 直接アクセスすることが可能な getter です。

静的 いいえ
パラメータ
パラメータ デフォルト パラメータ
$key 必須 レスポンス配列内の値を要求するキーの名前
$default
null
要求されたキーが存在しない場合はデフォルト値が返されます
返り値 mixed 。指定されたキーによって参照される値、もしくは $default で定義された値。
// opauth オブジェクトを取得
$opauth = \Auth_Opauth::forge(false);

// いくつかの認証データを取得
$provider = $opauth->get('auth.provider');
$uid = $opauth->get('auth.uid');
$token = $opauth->get('credentials.token', null);
$secret = $opauth->get('credentials.secret', null);
$expires = $opauth->get('credentials.expires', null);
$refresh_token = $opauth->get('credentials.refresh_token', null);

コールバックを処理する中でのみこのメソッドを利用することができます。 他のすべての場合において、利用可能な OAuth レスポンスはありません。 以前に処理された有効なレスポンスがあった場合、 その基本データはセッションキー "auth-strategy" を使用してセッションに格納されています。