これは、いわゆる「Twitterでログイン」っていうヤツで、
OAuth2という認証技術を使っています。
今回は、日頃使っているTwitterで試してみます。
ここでは、事あるごとに「Twitter」って書いてますが、ただの例です。。
流れは、こんな感じ
1. Simpleauth もしくは Ormauth を利用可能にしておく。
ユーザー認証 Authを学ぶ - Simpleauth編 - きまブログ
ユーザー認証 Authを学ぶ - Ormauth編 - きまブログ
2. PHPのパッケージ管理ツール comporser で、opauthをインストール
3. コントローラーを記述
4. Twitterにアプリ登録をする。
OAuth2 とは?
簡単に説明しておくと、
Twitterユーザーが自分のパスワードをWebアプリに渡さずに、
WebアプリでTwitterのデータを使ってもいい許可を与える認証技術です。
簡単に内部的な「仕組み(やりとり)」も書いておきます。
ユーザーとWebアプリとTwitterのやりとり
(ユーザー)
・ユーザーが、Webアプリにアクセスし「Twitterでログイン」のボタンを押す。
(Webアプリ)
・Twitterへリダイレクトする。
(ユーザー)
・Twitterへログインする。
・Webアプリが、ユーザーの権限でTwitterの機能を使っていいことを許可する。
→ TwitterはWebアプリの「コールバックURL」に「認可コード」を送る。
※「コールバックURL」は、Webアプリ登録時に登録してあるものです。
(Webアプリ)
・Twitterで「認可コード」を「トークン」に引き換えてもらう。
・「トークン」を使って、許可されたTwitterの機能を使える。
(タイムラインを取得したり。。)
composer とは?
composer/composer · GitHub
Composerというのは(ボクが何年も前にPHPを使っていた頃の)
PEARと同類のパッケージ管理ツールです。
FuelPHP独自の機能ではありません。
むしろ、FuelPHPのcore、packageはComposerを使ってインストールされてるみたい。
comporserの実体 comporser.phar の *.phar というのは、
PHp ARchive のことで、複数の*.php を固めたものみたい。(詳細不明)
composer.json の記述
composerは、composer.jsonファイルにインストールしたいパッケージを書いておき、実行します。
どんなパッケージがあるかは、以下のサイトで確認できます。
Packagist
まず、oauthパッケージ。
Packagist
composer.json のrequireに “opauth/opauth”:”0.4.*” を追加します。
"opauth/opauth": “0.4.*"
いまだと、0.4.4 がインストールされます。
次に、利用するサービスごとの「ストラテジ」というモノをインストールします。
ここでは、Twitterを使うので。。
opauth/opauth - Packagist
"opauth/twitter": "0.3.*"
いまだと、0.3.1 がインストールされます。
composer.jsonのrequireの部分だけの抜粋です。
"require": {
"php": ">=5.3.3",
"composer/installers": "~1.0",
"fuel/docs": "1.7.2",
"fuel/core": "1.7.2",
"fuel/auth": "1.7.2",
"fuel/email": "1.7.2",
"fuel/oil": "1.7.2",
"fuel/orm": "1.7.2",
"fuel/parser": "1.7.2",
"fuelphp/upload": "2.0.1",
"monolog/monolog": "1.5.*",
"michelf/php-markdown": "1.4.0",
"opauth/opauth": "0.4.*",
"opauth/twitter": "0.3.*"
},
composerの実行 (update)
編集した内容で更新するために、composerをupdateします。
php composer.phar update
確認のため、インストール済みのパッケージ一覧を表示します。
php composer.phar show -i
Controllerの作成 - Opauth編
OAuth2認証を実行していくためのコントローラーを記述していきます。
andreoav/fuel-opauth · GitHub
Opauth Controller example - Auth Package - FuelPHP Documentation
を参考にして、基本的に、FuelPHP本家のサンプルをコピペwします。
両者の共通のメソッドをザックリと比較してみます。
action_login()メソッド
両者でこのメソッドを比較すると。。
・opauth本家:new Auth_Opauth()
・FuelPHP本家:Auth_Opauth::forge()
となんとなく、やってることが違います。が、
forge()メソッドは、最終的に、
new static()により、オブジェクトを生成しているので、結果的に同じなんでしょう。。多分
(PHP5.3から導入された新しい、インスタンス生成方法らしい。。)
PHP: クラスの基礎 - Manual
action_callback()メソッド
なんで、こんなにちがうんやろ。。目的は同じはずなのに。。と思ったけど。。
・opauth本家:Twitter認証の状態表示。
・FuelPHP本家:opauth本家の内容を、login_orregister()メソッドで簡単にしてある感じ。
だと思います。。
(いまいち不明。。)
ここでは「Twitterでログイン」とありますが、
実際には、ローカルアカウントも作成して、両者を紐付けして管理するのがデフォルトみたいです。
そこで、FuelPHP本家のサンプルでは、
Twitterで認証したあとに、ローカルアカウントの状態に応じた処理も記載されています。