FuelPHPでOpauthを使用してFacebook連携を行ってみる。
下記のサイトを参考にしました。
http://fuweb.info/77
ログインまではうまく実装できました。
ただ、会員登録しようとするとメールアドレスが取得できなく・・・。
原因はFacebookのGraph APIのバージョンが2.4以降ではデフォルトで全ての情報を返却しない仕様に変更となっているようです。
そこでメールアドレスを取得できるようにするためにしたことをメモ。
app/config/opauth.php の設定を修正。
※ access_tokenを取得する際にメールアドレスも取得できるようにスコープを追加。
※ V2.4からはhttps://graph.facebook.com/meに取得したいフィールドを設定しないといけなくなったのでフィールドを設定できるように追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/** * Strategy * Refer to individual strategy's documentation on configuration requirements. * * eg. * 'Strategy' => array( * 'Facebook' => array( * 'app_id' => 'APP_ID', * 'app_secret' => 'APP_SECRET' * ), * ) */ 'Strategy' => array( 'Facebook' => array( 'app_id' => 'zzzzzzzzzz', 'app_secret' => 'xxxxxxxxxx', 'scope' => 'email', // ここを追加 'fields' => 'email,first_name,last_name,name', // ここを追加 ), ), |
vendor/opauth/facebook/FacebookStrategy.php を修正。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
/** * Queries Facebook Graph API for user info * * @param string $access_token * @return array Parsed JSON results */ private function me($access_token){ //ここから $params = array( 'access_token' => $access_token ); if (!empty($this->strategy['fields'])) { $params['fields'] = $this->strategy['fields']; } $me = $this->serverGet('https://graph.facebook.com/me', $params, null, $headers); //ここまで修正 if (!empty($me)){ return json_decode($me); } else{ $error = array( 'provider' => 'Facebook', 'code' => 'me_error', 'message' => 'Failed when attempting to query for user information', 'raw' => array( 'response' => $me, 'headers' => $headers ) ); $this->errorCallback($error); } } |
以上を修正することでメールアドレスも取得できるようになりました。
もっとよいやり方もあるかもです。
ちなみにvendor/opauth/facebookはgit submoduleになっているので修正する際は.gitディレクトリを消すなどする必要があるかも。
また、修正は自己責任でおねがいします。
Comments are closed