質問編集履歴

1 現在のコードを追記しました。

cosmo_tera

cosmo_tera score 11

2017/10/04 12:14  投稿

FacebookSDKを使った認証後、user_idを利用したい・オブジェクトの中身を取り出したい?
###前提・実現したいこと
PHPで、facebookのログイン機能を実現したい。
https://github.com/facebook/php-graph-sdk/blob/5.x/docs/examples/facebook_login.md
を参考にしています。
###詳細
たぶん認証は通っていて、下記のコードで
```ここに言語を入力
var_dump($tokenMetadata);
```
下記のように出力されます。
```ここに言語を入力
object(Facebook\Authentication\AccessTokenMetadata)#13 (1)
{ ["metadata":protected]=>
array(8)
{
   ["app_id"]=> string(15) "xxxxxxxxxxxxxxx"
    ["type"]=> string(4) "USER"
    ["application"]=> string(18) "XXXXXXXXXXXXXXXXXX"
    ["expires_at"]=> object(DateTime)#17 (3)
   {
        ["date"]=> string(26) "2017-12-03 09:14:00.000000"
        ["timezone_type"]=> int(3)
        ["timezone"]=> string(10) "Asia/Tokyo"
   }
    ["is_valid"]=> bool(true)
    ["issued_at"]=> object(DateTime)#18 (3)
    {
        ["date"]=> string(26) "2017-10-04 09:14:00.000000"
        ["timezone_type"]=> int(3)
        ["timezone"]=> string(10) "Asia/Tokyo"
   }
    ["scopes"]=> array(2)
    {
        [0]=> string(5) "email"
        [1]=> string(14) "public_profile"
    }
    ["user_id"]=> string(15) "xxxxxxxxxxxxxxxxxxxx"
}
}
```
この、["user_id"]部分を取り出したいのですが、どう記述してよいのかわかりません。
###試したこと
echo (string) $tokenMetadata["\0*\0user_id"];
→Cannot use object of type
→Cannot use object of type
###現在のコード
- ログインリンク生成部
```ここに言語を入力
require_once("sdk/facebook/src/Facebook/Facebook.php");
require_once("sdk/facebook/src/Facebook/autoload.php");
                   
$fb = new Facebook\Facebook([
   'app_id' => 'xxxxx',
   'app_secret' => 'xxxxxx',
   'default_graph_version' => 'v2.10',
   ]);
                   
                   
$helper = $fb->getRedirectLoginHelper();
                   
$permissions = ['email']; // Optional permissions
$loginUrl = $helper->getLoginUrl('リダイレクトするコールバックURL', $permissions);
?>                   
<a href="' . $loginUrl . '"><img src="xxx" /></a>
```
- リダイレクトするコールバックURL
```ここに言語を入力
session_start();
require_once("src/Facebook/Facebook.php");
require_once("src/Facebook/autoload.php");
$fb = new Facebook\Facebook([
 'app_id' => 'xxxxx',
 'app_secret' => 'xxxxxxx',
 'default_graph_version' => 'v2.10',
 ]);
$helper = $fb->getRedirectLoginHelper();
try {
 $accessToken = $helper->getAccessToken('コールバックURL');
} 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 SDKa returned an error: ' . $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);
//ここまでサンプルどおり。
$tokenMetadata->metadata->user_id;
(Cannot access protected property)
echo $tokenMetadata["\0*\0metadata"]["user_id"];
(Cannot use object of type)
```
  • PHP

    30558 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Facebook

    504 questions

    Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る