facebookログインを使って


# [PHP]簡単facebookログインの使いログイン実装

## 目的：facebookログインを使ってユーザー情報を楽〜に取得

SDKのダウンロードサイト（PHPの方）
[https://developers.facebook.com/docs/reference/php](https://developers.facebook.com/docs/reference/php)

主な流れ  
1. サイトの画面のログインボタン  
2. facebookログイン画面  
3. アプリ認証画面  
4. コールバックの画面  
5. ログイン後の画面  

### 手順

**1 facebookアプリの登録**  
[facebook for developers](https://developers.facebook.com/)

↑にてアプリの申請登録（Add a New App）をして、「ID」「SECRET_ID」を取得します。*マル秘のIDですので教えないように

またSettings画面の「Client OAuth Settings」項目にある「Valid OAuth redirect URIs」の部分に
ログイン時の戻ってくる自分のURLを登録しておく。
（作成の仕方は省きます）

**2 ダウンロードしたファイルをプロジェクトフォルダー配下に置き呼び出し準備**  
config.php（設定ファイル）を作成する。  

```php
<?php
require_once("Facebook/autoload.php");
 
$fb = new Facebook\Facebook([
  'app_id' => '◯◯◯◯◯',			//ID
  'app_secret' => '◯◯◯◯◯',		//SECRET_ID
  'default_graph_version' => 'v2.5', //version
]);
```

（フレームワーク等を使用しているならば環境ごとに分けられるのでオススメです）

**3 ログイン用ボタンの生成**  
作成したいviewファイル

```php
<?php
session_start();
 
header("Content-type: text/html; charset=utf-8");
 
//設定ファイル
require_once("config.php");
 
$helper = $fb->getRedirectLoginHelper();
 
//オプションによって認証画面の文言が変わる
//$permissions = ['email', 'user_likes','user_posts']; //あなたの公開プロフィール、メールアドレス、タイムライン投稿、いいね！。
//$permissions = ['email', 'user_likes']; //あなたの公開プロフィール、メールアドレス、いいね！。
//$permissions = ['email', 'user_posts'];//あなたのタイムライン投稿。
//$permissions = ['email','user_friends'];//あなたの公開プロフィール、友達リスト、メールアドレス。
//$permissions = ['email'];//あなたの公開プロフィール、メールアドレス。
$permissions = [];//あなたの公開プロフィール。
$loginUrl = $helper->getLoginUrl('コールバックに使用するurlを記載', $permissions);
 
echo '<a href="' . $loginUrl . '">ログインする</a>';
```
*アプリケーションを初回で使う場合はユーザーに対して公開される情報の確認ページが表示されます。

**4 コールバックからの戻り先の作成**  

*セッションスタートはしておく  

```php

<?php
session_start();
 
header("Content-type: text/html; charset=utf-8");
 
//設定ファイル
require_once("config.php");
 
//タイムゾーンの設定
date_default_timezone_set('asia/tokyo');
 
$helper = $fb->getRedirectLoginHelper();
 
try {
	if (isset($_SESSION['facebook_access_token'])) {
		$accessToken = $_SESSION['facebook_access_token'];
	} else {
		//アクセストークンを取得する
		$accessToken = $helper->getAccessToken();
	}
} catch(Facebook\Exceptions\FacebookResponseException $e) {
	// When Graph returns an error
	echo 'Graph returned an error: ' . $e->getMessage();
	exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
	// When validation fails or other local issues
	echo 'Facebook SDK returned an error: ' . $e->getMessage();
	exit;
}
 
if (isset($accessToken)) {
	//アクセストークンをセッションに保存
	$_SESSION['facebook_access_token'] = (string) $accessToken;
	
	header('Location: ログイン成功時の遷移先url');
	exit();
}else{
	echo "<a href='index.php'>はじめのページへ</a>";
}

```

初めてアプリケーションに登録する時にユーザが「OK（もしくはキャンセル）」をクリックした際に呼ばれるファイルです。1アクセストークンを取得して、そのアクセストークンをセッションに保存しています。
 
アクセストークンを取得すれば、ログイン状態となります。ログイン成功時の画面遷移させています。

**5 ログイン画面の作成** 

```php

<?php
session_start();
 
header("Content-type: text/html; charset=utf-8");
 
//設定ファイル
require_once("config.php");
 
if (isset($_SESSION['facebook_access_token'])) {
	
	$accessToken = $_SESSION['facebook_access_token'];
 
	$fb->setDefaultAccessToken($accessToken);
	
	try {
		//取得するユーザ情報の指定
		$response = $fb->get('/me?fields=id,name,first_name,last_name,email,gender');
		$profile = $response->getGraphUser();
		
		//ユーザ画像取得
		$UserPicture = $fb->get('/me/picture?redirect=false&height=200');
		$picture = $UserPicture->getGraphUser();
		
	} catch(Facebook\Exceptions\FacebookResponseException $e) {
		// When Graph returns an error
		echo 'Graph returned an error: ' . $e->getMessage();
		exit;
	} catch(Facebook\Exceptions\FacebookSDKException $e) {
		// When validation fails or other local issues
		echo 'Facebook SDK returned an error: ' . $e->getMessage();
		exit;
	}
	
	$id=$profile['id'];
	$name=$profile['name'];
	$first_name=(isset($profile['first_name'])) ? $profile['first_name'] : '';
	$last_name=(isset($profile['last_name'])) ? $profile['last_name'] : '';
	$email=$profile['email'];
	$gender=(isset($profile['gender'])) ? $profile['gender'] : '';
	$picture_url = $picture['url'];
    
   
	echo "<p>アクセストークン：".$accessToken."</p>";
	echo "<p>ID：".$id."</p>";
	echo "<p>名前：".$name."</p>";
	echo "<p>性別：".$gender."</p>";
	echo "<p>ファーストネーム：".$first_name."</p>";
	echo "<p>ラストネーム：".$last_name."</p>";
	echo "<p>メール：".$email."</p>";//ユーザが未公開・未設定の場合は表示されない
	echo "<p><img src=".$picture_url."></p>";
	
	echo "<p><a href='logout.php'>ログアウト</a></p>";
 
}else{
	header('Location: index.php');
	exit();
}
?>
```

*これでfacebookログインは完成です。この機能を使ってユーザー側に簡単なサイト登録をさせることができるようになります*

以上
---