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

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

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

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

3857閲覧

TwitterAPI Opauthを使用してソーシャルログイン時にemailを取得する

hebo_san

総合スコア16

OAuth

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2016/08/23 02:39

編集2016/08/23 03:12

行いたいこと:
fuelphp,Opauth使ってTwiiterへのソーシャルログイン時にユーザーのemailを取得したい

前提:

  • whitelist? email取得用の権限は取得済み。

ログイン時

TwitterStrategy.phpを参考に使用しています。

  • 公式参考URL :

https://dev.twitter.com/rest/reference/get/account/verify_credentials

  • fulephp : 1.7.3
  • php 5.5.30(cli)

状況:

  • リダイレクトやemail以外の値取得など通常フローは問題なく動作。
  • emailのみ取得ができていない。

原因がわからず煮詰まってしまっているのでご教示いただけると大変ありがたく思います。
よろしくお願い致します。

lang

1 2<?php 3/** 4 * Twitter strategy for Opauth 5 * Based on https://dev.twitter.com/docs/auth/obtaining-access-tokens 6 * 7 * More information on Opauth: http://opauth.org 8 * 9 * @copyright Copyright © 2012 U-Zyn Chua (http://uzyn.com) 10 * @link http://opauth.org 11 * @package Opauth.TwitterStrategy 12 * @license MIT License 13 */ 14 15class TwitterStrategy extends OpauthStrategy { 16 17 /** 18 * Compulsory parameters 19 */ 20 public $expects = array('key', 'secret'); 21 22 /** 23 * Optional parameters 24 */ 25 public $defaults = array( 26 'method' => 'POST', // The HTTP method being used. e.g. POST, GET, HEAD etc 27 'oauth_callback' => '{complete_url_to_strategy}oauth_callback', 28 29 // For Twitter 30 'request_token_url' => 'https://api.twitter.com/oauth/request_token', 31 'authorize_url' => 'https://api.twitter.com/oauth/authenticate', // or 'https://api.twitter.com/oauth/authorize' 32 'access_token_url' => 'https://api.twitter.com/oauth/access_token', 33 'verify_credentials_json_url' => 'https://api.twitter.com/1.1/account/verify_credentials.json', 34 // 'verify_credentials_skip_status' => true, 35 'verify_credentials_include_email' => true, 36 'twitter_profile_url' => 'http://twitter.com/{screen_name}', 37 38 // From tmhOAuth 39 'user_token' => '', 40 'user_secret' => '', 41 'use_ssl' => true, 42 'debug' => false, 43 'force_nonce' => false, 44 'nonce' => false, // used for checking signatures. leave as false for auto 45 'force_timestamp' => false, 46 'timestamp' => false, // used for checking signatures. leave as false for auto 47 'oauth_version' => '1.0', 48 'curl_connecttimeout' => 30, 49 'curl_timeout' => 10, 50 'curl_ssl_verifypeer' => false, 51 'curl_followlocation' => false, // whether to follow redirects or not 52 'curl_proxy' => false, // really you don't want to use this if you are using streaming 53 'curl_proxyuserpwd' => false, // format username:password for proxy, if required 54 'is_streaming' => false, 55 'streaming_eol' => "\r\n", 56 'streaming_metrics_interval' => 60, 57 'as_header' => true, 58 ); 59 60 public function __construct($strategy, $env) { 61 parent::__construct($strategy, $env); 62 63 $this->strategy['consumer_key'] = $this->strategy['key']; 64 $this->strategy['consumer_secret'] = $this->strategy['secret']; 65 66 require dirname(__FILE__).'/Vendor/tmhOAuth/tmhOAuth.php'; 67 $this->tmhOAuth = new tmhOAuth($this->strategy); 68 } 69 70 /** 71 * Auth request 72 */ 73 public function request() { 74 $params = array( 75 'oauth_callback' => $this->strategy['oauth_callback'] 76 ); 77 78 $results = $this->_request('POST', $this->strategy['request_token_url'], $params); 79 80 if ($results !== false && !empty($results['oauth_token']) && !empty($results['oauth_token_secret'])){ 81 if (!session_id()) { 82 session_start(); 83 } 84 $_SESSION['_opauth_twitter'] = $results; 85 86 $this->_authorize($results['oauth_token']); 87 } 88 } 89 90 /** 91 * Receives oauth_verifier, requests for access_token and redirect to callback 92 */ 93 public function oauth_callback() { 94 if (!session_id()) { 95 session_start(); 96 } 97 $session = $_SESSION['_opauth_twitter']; 98 unset($_SESSION['_opauth_twitter']); 99 100 if (!empty($_REQUEST['oauth_token']) && $_REQUEST['oauth_token'] == $session['oauth_token']) { 101 $this->tmhOAuth->config['user_token'] = $session['oauth_token']; 102 $this->tmhOAuth->config['user_secret'] = $session['oauth_token_secret']; 103 104 $params = array( 105 'oauth_verifier' => $_REQUEST['oauth_verifier'] 106 ); 107 108 $results = $this->_request('POST', $this->strategy['access_token_url'], $params); 109 110 if ($results !== false && !empty($results['oauth_token']) && !empty($results['oauth_token_secret'])) { 111 $credentials = $this->_verify_credentials($results['oauth_token'], $results['oauth_token_secret']); 112 113 if (!empty($credentials['id'])) { 114 115 $this->auth = array( 116 'uid' => $credentials['id'], 117 'info' => array( 118 'name' => $credentials['name'], 119 'nickname' => $credentials['screen_name'], 120 'urls' => array( 121 'twitter' => str_replace('{screen_name}', $credentials['screen_name'], $this->strategy['twitter_profile_url']) 122 ) 123 ), 124 'credentials' => array( 125 'token' => $results['oauth_token'], 126 'secret' => $results['oauth_token_secret'] 127 ), 128 'raw' => $credentials 129 ); 130 131 $this->mapProfile($credentials, 'location', 'info.location'); 132 $this->mapProfile($credentials, 'description', 'info.description'); 133 $this->mapProfile($credentials, 'profile_image_url', 'info.image'); 134 $this->mapProfile($credentials, 'url', 'info.urls.website'); 135 136 $this->callback(); 137 } 138 } 139 } else { 140 $error = array( 141 'code' => 'access_denied', 142 'message' => 'User denied access.', 143 'raw' => $_GET 144 ); 145 146 $this->errorCallback($error); 147 } 148 149 150 } 151 152 private function _authorize($oauth_token) { 153 $params = array( 154 'oauth_token' => $oauth_token 155 ); 156 157 if (!empty($this->strategy['force_login'])) $params['force_login'] = $this->strategy['force_login']; 158 if (!empty($this->strategy['screen_name'])) $params['screen_name'] = $this->strategy['screen_name']; 159 160 $this->clientGet($this->strategy['authorize_url'], $params); 161 } 162 163 private function _verify_credentials($user_token, $user_token_secret) { 164 $this->tmhOAuth->config['user_token'] = $user_token; 165 $this->tmhOAuth->config['user_secret'] = $user_token_secret; 166 167 // $params = array( 'skip_status' => $this->strategy['verify_credentials_skip_status'] ); 168 $params = array( 'include_email' => $this->strategy['verify_credentials_include_email'] ); 169 170 $response = $this->_request('GET', $this->strategy['verify_credentials_json_url'], $params); 171 172 return $this->recursiveGetObjectVars($response); 173 } 174 175 176 177 /** 178 * Wrapper of tmhOAuth's request() with Opauth's error handling. 179 * 180 * request(): 181 * Make an HTTP request using this library. This method doesn't return anything. 182 * Instead the response should be inspected directly. 183 * 184 * @param string $method the HTTP method being used. e.g. POST, GET, HEAD etc 185 * @param string $url the request URL without query string parameters 186 * @param array $params the request parameters as an array of key=value pairs 187 * @param string $useauth whether to use authentication when making the request. Default true. 188 * @param string $multipart whether this request contains multipart data. Default false 189 */ 190 private function _request($method, $url, $params = array(), $useauth = true, $multipart = false) { 191 $code = $this->tmhOAuth->request($method, $url, $params, $useauth, $multipart); 192 193 if ($code == 200) { 194 if (strpos($url, '.json') !== false) { 195 $response = json_decode($this->tmhOAuth->response['response']); 196 } else { 197 $response = $this->tmhOAuth->extract_params($this->tmhOAuth->response['response']); 198 } 199 200 return $response; 201 } else { 202 $error = array( 203 'code' => $code, 204 'raw' => $this->tmhOAuth->response['response'] 205 ); 206 207 $this->errorCallback($error); 208 209 return false; 210 } 211 } 212 213}

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

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

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

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

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

guest

回答2

0

ベストアンサー

ホワイトリスト登録が確認できたので

'verify_credentials_include_email'=>true // URL 変換後 include_email=1 となる

ではなく

'verify_credentials_include_email'=>'true' // URL 変換後 include_email=true となる

で発行してみてください

投稿2016/08/23 02:52

編集2016/08/23 03:38
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hebo_san

2016/08/23 03:09

ホワイトリスト申請自体は最近にしたものですが承認されてから管理画面に新たな権限と連携時にemail取得の文言が出るようにはなりました
退会済みユーザー

退会済みユーザー

2016/08/23 03:39

これでできなかったら申請したIPとホワイトリストに登録したIPが違うと思われます
hebo_san

2016/08/23 10:12

ありがとうございます!無事解決できました。
guest

0

メールアドレスを取得するには、
アクセストークンを取得したあとにさらにもう一度 データを取得し直す必要がある。

TwitterStrategyを触る必要も、
'verify_credentials_include_email'=>true
とする必要もない。

1 まずはアクセストークンを取得
(ここではどのようにしてもメールアドレスは取得できない)

2 1 で取得したアクセストークンで接続し直す

php

1 2$this->connection = new TwitterOAuth( 3 $config['APIkey'], 4 $config['APIsecret'], 5 $access_token, 6 $access_token_secret 7 ); 8 9 $json = $this->connection->get("account/verify_credentials", ['include_entities'=> 'false', 'include_email'=> 'true']); 10

これでメールアドレスが取得できる。

投稿2017/05/10 10:23

ma7ma7pipipi

総合スコア85

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問