PHPにてacebook / twitter / Googleアカウントでソーシャル(SNS)ログインする方法
2024/02/22
PHPにて制作したシステムで「facebook / twitter / Googleアカウントでログインするシステムが欲しい」と言われた。PHPで最初からプログラムを組むのは大変そうなのでライブラリが無いか探したところOpauthというのが簡単にいけた。以下に実装方法をメモ。
目次
今回の対応内容
facebook / twitter / Googleアカウントでログインし、ユニークなID及び登録名を取得する。サイト種別情報とユニークIDがあれば、後はセッションなりCookieでログインシステムは作られるので、今回はその取得部分をメモ。
Opauthの設置
以下ページよりダウンロードする。
http://opauth.org/download.php
「Opauth bundled with examples」と書かれているファイルが最初からfacebook / twitter / Google対応なのでオススメ。ダウンロードしたzipファイルを解凍し、任意のディレクトリにアップロードする。
今回はドメインを「http://hoge.com/test/opauth/」でディレクトリを「/var/www/html/test/opauth/」と仮定する。
「/var/www/html/test/opauth/」のディレクトリに、解凍したファイルを全てアップロードする。
設定ファイルの編集
opauth.conf.phpが設定ファイルになる。path及びStrategyの部分を書き換える。Strategyの取得方法は後述する。
facebookの設定
以下ページからアカウント作成もしくはログインする。
https://developers.facebook.com
アカウント作成には電話番号もしくはクレカ登録が必要なので注意。適当な名前のアプリを作成し、アプリID及びapp secretを取得する。尚、「設定→ページ下部のウェブサイトURL」を設定しておくこと。今回の場合だと「http://hoge.com/test/opauth/」を設定する。
opauth.conf.phpのStrategyのfacebook部分にapp_idとapp_secretを入力する。
twitterの設定
以下ページからアカウント作成もしくはログインする。
こちらは電話番号登録が必要になる。尚、電話番号がうまくいかない場合がある。その場合は以下のようにページをリロードすると正常に登録された。
http://absg.hatenablog.com/entry/2015/01/26/163057
Website、Callback URL共に「http://hoge.com/test/opauth/」と設定した。
opauth.conf.phpのStrategyのtwitter部分にkeyとsecretを入力する。
尚、このまま動かそうとすると「The Twitter REST API v1 is no longer active~~」という「APIのバージョンを1.0から1.1にして下さい」みたいなエラーが表示される。
「/opauth/lib/Opauth/Strategy/Twitter/TwitterStrategy.php」の以下部分を変更する。
#32行目付近の 'verify_credentials_json_url' => 'https://api.twitter.com/1/account/verify_credentials.json', #を以下に変更する。 'verify_credentials_json_url' => 'https://api.twitter.com/1.1/account/verify_credentials.json',
Googleの設定
以下よりアカウント作成もしくはログインする。
https://console.developers.google.com/apis/library
認証情報→認証情報を作成→OAuthクライアントID→ウェブアプリケーションで作成する。まだリダイレクトURLに関しては詳しくは分からないんだけど「oauth2callback」をつける必要があるみたい。
今回は「http://hoge.com/test/opauth/google/oauth2callback」と設定した。
テストしてみる
「http://hoge.com/test/opauth/」のURLを開くとfacebook / Google / Twitterのリンクが表示され、そのリンクから遷移すると各サイトのログインページが表示される。
また正常にログインが完了すると「http://hoge.com/test/opauth/callback.php」にリダイレクトされ、取得したパラメータが表示される。
リダイレクト後の動きを変更する
opauth.conf.phpを以下の通り編集する。
#'callback_url' => '{path}callback.php',
'callback_url' => '{path}result.php',
以下を記述したファイルをresult.phpとしてアップロードする。
<?php
define('CONF_FILE', dirname(__FILE__).'/'.'opauth.conf.php');
define('OPAUTH_LIB_DIR', dirname(__FILE__).'/lib/Opauth/');
$flg = false;
do{
if(!file_exists(CONF_FILE)){
break;
}
require CONF_FILE;
require OPAUTH_LIB_DIR.'Opauth.php';
$Opauth = new Opauth( $config, false );
$response = null;
switch($Opauth->env['callback_transport']){
case 'session':
session_start();
$response = $_SESSION['opauth'];
unset($_SESSION['opauth']);
break;
case 'post':
$response = unserialize(base64_decode( $_POST['opauth'] ));
break;
case 'get':
$response = unserialize(base64_decode( $_GET['opauth'] ));
break;
default:
break;
}
if(array_key_exists('error', $response)){
break;
}else{
if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])){
break;
} elseif (!$Opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $reason)){
break;
} else {
$flg = true;
}
}
}while(0);
if( $flg ){
$id = $response['auth']['uid'];
$name = $response['auth']['info']['name'];
echo 'login success [id]'.$id.'[name]'.$name;
}else{
echo 'login error';
}
ログインが成功するとユニークID及び名前が表示される。
その他
あとはセッションなりCookieでログインシステムが作成できる。また名前はあっても無くてもいいかと。
関連記事
-
-
PHPにて「ImageHash」ライブラリを使用し画像の類似度を算出する方法
以前にPHPの「image-comparator」ライブラリで画像の類似度を算出 ...
-
-
PHPにてmicrotimeで秒数を測定した際「xxxxxE-5」のような値になる場合の対応方法
PHPで過去記事を参考の上、あるプログラムの処理にかかった時間を測定しようとした ...
-
-
PHPで指定月の月末日を取得
今月の、だったらdate('t')でいくけど指定月の場合は どうしたらいいのか分 ...
-
-
eval関数について
ちょくちょく見ることがあったeval関数について、 なんとなく分かってきたのでメ ...
-
-
composerでライブラリのインストールとインストール時のエラー対応方法
composerでライブラリをインストールする際に「The following ...