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

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

新規登録して質問してみよう
ただいま回答率
85.48%
OAuth

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

PHP

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

GitHub

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

Q&A

解決済

1回答

532閲覧

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

nakatatanaka44

総合スコア9

OAuth

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

PHP

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

GitHub

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

0グッド

0クリップ

投稿2017/06/16 07:27

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で返って来てしまう ------------------------------------------------------------------------------ 詳細は以上です。 どうぞ一つ宜しくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

php

1$user->getId()

php

1$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/16 08:40

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakatatanaka44

2017/06/19 07:14

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問