Facebook、Twitterのアカウントでログインできる処理を作る。
最近のWebアプリではよく付いていますよね、TwitterとかFacebookのアカウントでログイン出来る処理。必要になったので、ちょっと実装方法などをメモしておく。
最初っからスクラッチで作りこもうかと思ったけど、面倒かつ車輪の再発明なのでそんなことはしない。Packagistを探したらあった。
今回使うのはhybridauthというライブラリです。Twitter,Facebookの他にもGoogleとかGithubのアカウントを使ってログインできるみたいです。
HybridAuth, open source social sign on php libraryhybridauth.sourceforge.net
Composerのインストール方法を記述しようかと思ったら、テストで使おうとしたさくらインターネットのスタンダートプランはPHP5.2 orz 5.2系も陳腐化している辺りに年月の速さの恐ろしさを感じます。そもそもスタンダートプランだとcurlがまともに機能しないっぽ。。さっさとVPSプランに変えろということか。。
さて、Composerでhybridauthをインストール前提で書いておく。面倒だからソースを書いておくだけに留める。ドキュメントも全部熟読しているとは言いがたいし、簡単に使えるんだなというフレーバーだけでも理解してもらえると幸いです。
<?php
require_once dirname(__FILE__) .'/../composer/vendor/autoload.php';
class SocialLoginWrapper {
public $hybridauth;
public $auth_library_path = '';
public function __construct() {
$this->auth_library_path = 'http://'. $_SERVER['SERVER_NAME'] .'/socialLoginTest/composer/vendor/hybridauth/hybridauth/hybridauth/';
$paramArray = $this->getSocialLoginParamArray();
$this->hybridauth = new Hybrid_Auth($paramArray);
}
public function getSocialLoginParamArray() {
$paramArray = array(
"base_url" => $this->auth_library_path,
"providers" => array ( //'key' is your twitter application consumer key
"Twitter" => array (
"enabled" => true,
"keys" => array ( "key" => "twitter_auth_id", "secret" => "twitter_auth_key" )
),
"Facebook" => array ( // 'id' is your facebook application id
"enabled" => true,
"keys" => array ( "id" => "facebook_auth_id", "secret" => "facebook_auth_key" ),
"scope" => "email, user_about_me, user_birthday, user_hometown" // optional
)
)
);
return $paramArray;
}
public function getSocialLoginObj() {
return $this->hybridauth;
}
}
$socialObj = new SocialLoginWrapper();
$loginObj = $socialObj->getSocialLoginObj();
// twitterの場合
$twitter = $loginObj->authenticate('Twitter'); // ログイン処理
$twitter_user_profile = $twitter->getUserProfile();
$account_settings = $twitter->api()->get('account/settings.json');
print_r($twitter);
print_r($twitter_user_profile);
print_r($account_settings);
$twitter->logout(); // ログアウト
// facebookの場合
$facebook = $loginObj->authenticate('Facebook'); // ログイン処理
print_r($facebook);
$facebook->logout(); // ログアウト
twitter_auth_id、twitter_auth_key、facebook_auth_id、facebook_auth_keyは適時置き換えてください。下記で取得できます。twitterの場合はパーミッションはread,writeです。
twitterのディベロッパーページ Twitter Application Management