質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.40%

  • PHP

    21919questions

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

  • GitHub

    888questions

    GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

  • OAuth

    115questions

    OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Githubアカウントでログイン!機能の実装時json_decodeするとエラーを吐きnullで返って来てしまう問題

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 620

PHP初心者です!皆様の力をお貸しいただけるととても助かります。

今現在、Githubアカウントで自前サービスにログインを行うためのいわゆるソーシャルログイン機能
を実装しております。

そこで、Github側の認証を通し、ユーザ情報をjson形式で取得した後に、json_decodeを行い
SQLでDB内にid情報やemail情報を格納する処理を書いているところなのですが、json_decodeが上手いこと出来ない状況です。

詳細は以下の通りです。(一部)

Githubアカウントでログイン!機能の実装時json_decodeするとエラーを吐きnullで返って来る問題

<?php
session_start();
require_once('vendor/autoload.php');
require_once '_config.php';

// 正式にlogin.phpから来たのか確認
if (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
unset($_SESSION['oauth2state']);
exit('Invalid state');
}

// 認証コードからアクセストークンを取得
$token = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);

echo $token.'\n';
echo 'Successfully callbacked!!'.'\n';

// トークン使って認可した情報を取得
$user = $provider->getResourceOwner($token);

//var_dump($user);//この時点でdecodeする前の情報の出力は問題なし
この時点での出力結果→
半角英数字たくさん\nSuccessfully callbacked!!\nobject(League\OAuth2\Client\Provider\GithubResourceOwner)#20 (2) { ["domain":protected]=> string(18) "https://github.com" ["response":protected]=> array(30) { ["login"]=> string(16) "aaaaaaaa" ["id"]=> int(12345678) ["avatar_url"]=> string(53) "https://avatars2.githubusercontent.com/u/1234567v=3" ["gravatar_id"]=> string(0) "" ["url"]=> string(45) "https://api.github.com/users/ユーザ名" ["html_url"]=> string(35) "https://github.com/ユーザ名" ["followers_url"]=> string(55) "https://api.github.com/users/ユーザ名/followers" ["following_url"]=> string(68) "https://api.github.com/users/ユーザ名/following{/other_user}" ["gists_url"]=> string(61) "https://api.github.com/users/ユーザ名/gists{/gist_id}" ["starred_url"]=> string(68) "https://api.github.com/users/ユーザ名/starred{/owner}{/repo}" ["subscriptions_url"]=> string(59) "https://api.github.com/users/ユーザ名/subscriptions" ["organizations_url"]=> string(50) "https://api.github.com/users/ユーザ名/orgs" ["repos_url"]=> string(51) "https://api.github.com/users/ユーザ名/repos" ["events_url"]=> string(62) "https://api.github.com/users/ユーザ名/events{/privacy}" ["received_events_url"]=> string(61) "https://api.github.com/users/ユーザ名/received_events" ["type"]=> string(4) "User" ["site_admin"]=> bool(false) ["name"]=> NULL ["company"]=> NULL ["blog"]=> string(0) "" ["location"]=> NULL ["email"]=> NULL ["hireable"]=> NULL ["bio"]=> NULL ["public_repos"]=> int(20) ["public_gists"]=> int(0) ["followers"]=> int(0) ["following"]=> int(0) ["created_at"]=> string(20) "2017-04-24T04:41:00Z" ["updated_at"]=> string(20) "2017-06-14T08:41:44Z" } }

$result = json_decode($user, true);

//var_dump($result);//ここでのエラー→Warning: json_decode() expects parameter 1 to be string, object given in

//nullで返って来てしまう

詳細は以上です。
どうぞ一つ宜しくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

使用しているライブラリのソースコードを見る限りjson_decode()する必要はなく、
単純に

$user->getId()


$user->getEmail()


などのgetXXX()というメソッドを呼び出すだけで認証情報にアクセスできそうです。
https://github.com/thephpleague/oauth2-github/blob/master/src/Provider/GithubResourceOwner.php


json_decodeが上手いこと出来ない

原因は、json_decode()実行時のエラーメッセージが示しているとおりです。

→Warning: json_decode() expects parameter 1 to be string, object given in

json_decode() は第1引数に文字列を期待しますが、オブジェクトが渡されました。

実際、json_decode()の第1引数に渡している変数$userは、
var_dump($user);の結果が示しているとおり
League\OAuth2\Client\Provider\GithubResourceOwner型のオブジェクトです。

何らかのブログを参考にコードを書いているようですが、ライブラリの使用方法でわからないことがある場合は、
そのライブラリのオリジナルのドキュメントを参照してみてください。

http://oauth2-client.thephpleague.com/
https://github.com/thephpleague/oauth2-client
https://github.com/thephpleague/oauth2-github

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/19 16:14

    ご教授頂いた方法で無事、ユーザ情報を抽出することが出来ました!
    詳しく解説してくださり、とても分かりやすかったです。
    この度はどうもありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • PHP

    21919questions

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

  • GitHub

    888questions

    GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

  • OAuth

    115questions

    OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

  • トップ
  • PHPに関する質問
  • Githubアカウントでログイン!機能の実装時json_decodeするとエラーを吐きnullで返って来てしまう問題