PHPでFacebookにログイン認証するサンプル
アプリIDとシークレットIDの取得が前提です。
login.php
<?php require_once __DIR__ . '/facebook-php-sdk-v4-5.0.0/src/Facebook/autoload.php'; $appId = "xxxxxxxxxxxxx"; $appSecret = "xxxxxxxxxxxxxxxxxxxxx"; $REDIRECT_URI = "http://192.168.1.1/redirect.php"; $fb = new Facebook\Facebook([ 'app_id' => $appId, 'app_secret' => $appSecret, ]); $helper = $fb->getRedirectLoginHelper(); // Optional permissions $permissions = ['public_profile','email','user_birthday','publish_actions']; $loginUrl = $helper->getLoginUrl($REDIRECT_URI, $permissions); header("Location: {$loginUrl}"); ?>
ログイン認証されている場合は、指定したページ
$REDIRECT_URI = "http://192.168.1.1/redirect.php";
に移動します。
認証されていない場合は、Facebookのログイン画面を挟んでから、移動します。
redirect.php
<?php require_once __DIR__ . '/facebook-php-sdk-v4-5.0.0/src/Facebook/autoload.php'; $appId = "xxxxxxxxxxxxx"; $appSecret = "xxxxxxxxxxxxxxxxxxxxx"; $fb = new Facebook\Facebook([ 'app_id' => $appId, 'app_secret' => $appSecret, ]); $helper = $fb->getRedirectLoginHelper(); try { $accessToken = $helper->getAccessToken(); } catch(Facebook\Exceptions\FacebookResponseException $e) { // When Graph returns an error echo 'FacebookResponseException: ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { // When validation fails or other local issues echo 'FacebookSDKException: ' . $e->getMessage(); exit; } if (! isset($accessToken)) { if ($helper->getError()) { header('HTTP/1.0 401 Unauthorized'); echo "Error: " . $helper->getError() . "\n"; echo "Error Code: " . $helper->getErrorCode() . "\n"; echo "Error Reason: " . $helper->getErrorReason() . "\n"; echo "Error Description: " . $helper->getErrorDescription() . "\n"; } else { header('HTTP/1.0 400 Bad Request'); echo 'Bad request'; exit; } } // Logged in echo '<h3>Access Token</h3>'; var_dump($accessToken->getValue()); // The OAuth 2.0 client handler helps us manage access tokens $oAuth2Client = $fb->getOAuth2Client(); // Get the access token metadata from /debug_token $tokenMetadata = $oAuth2Client->debugToken($accessToken); echo '<h3>Metadata</h3>'; var_dump($tokenMetadata); // Validation (these will throw FacebookSDKException's when they fail) $tokenMetadata->validateAppId(APP_ID); // Replace {app-id} with your app id // If you know the user ID this access token belongs to, you can validate it here $tokenMetadata->validateExpiration(); if (! $accessToken->isLongLived()) { // Exchanges a short-lived access token for a long-lived one try { $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken); } catch (Facebook\Exceptions\FacebookSDKException $e) { //echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n"; //exit; } echo '<h3>Long-lived</h3>'; var_dump($accessToken->getValue()); } ?> callback用のページです、ここでユーザのアクセストークン取得したら、長いアクセストークンに変換したりします。