16447


Facebook SDK for PHP や Opauth を
使用してFacebookのアカウントでログインする仕組みを作ろうとしていますが、scopeでemailを指定してもメールアドレスが取得できず困っています。

①「developers.facebook.com」でアプリを作成し、「App ID」「App Secret」は取得しています。(v2.4)

②下記URLのFacebookの認証画面で「メールアドレスを受け取る」と書いてあり、OKを押しますが・・・  
<https://www.facebook.com/dialog/oauth?client_id=>【App ID】&redirect_uri=【App
Secret】&scope=email

③返ってきたアクセストークンを使用して下記URLから情報を取得しますが、ユーザー名とIDしか取得できません。  
<https://graph.facebook.com/me?access_token=>【ACCESS_TOKEN】

④Facebook SDK for PHPの設定

[code]

    $config = array(
        'appId' => '【App ID】',
        'secret' => '【App Secret】'
    );
    
    $facebook = new Facebook($config);
    
    if ($facebook->getUser()) {
        try {
            $user = $facebook->api('/me','GET');
        } catch(FacebookApiException $e) {
            //取得に失敗したら例外をキャッチしてエラーログに出力
            error_log($e->getType());
            error_log($e->getMessage());
        }
    }
    
    ・
    ・
    ・
    
    if (isset($user)) {
        //ログイン済みでユーザー情報が取れていれば表示
        echo '<pre>';
        var_dump($user);
        echo '</pre>';
    } else {
    //未ログインならログイン URL を取得してリンクを出力
        $params = array('scope' => 'email', 'redirect_uri' => '【URL】');
        $loginUrl = $facebook->getLoginUrl($params);
        echo '<a href="' . $loginUrl . '">Login with Facebook</a>';
    }
    
[/code]

⑤Opauthの設定

[code]

    // opauth.conf.php
    
    ・
    ・
    ・
    
            'Strategy' => array(
                // Define strategies and their respective configs here
    
                'Facebook' => array(
                            'app_id' => '【App ID】',
                            'app_secret' => '【App Secret】',
                            'scope' => array('email')
                 ),
    
            ),
    ・
    ・
    ・
    
[/code]

以上、的を得た質問になっているかわかりませんが、よろしくお願いします。


CC BY-SA 3.0
2015-09-05T08:53:34.813
16286
2015-09-09T12:40:17.287
10545
question
php facebook
Facebook SDK for PHP や Opauth でFacebookからメールアドレスが取得できません。


ご指摘いただいたので解決方法を記載します。

おそらくFacebookの仕様変更が原因だと思われます。

<https://graph.facebook.com/me?access_token=>【ACCESS_TOKEN】  
上記ではメールアドレスは取得できませんが、

<https://graph.facebook.com/me?fields=id,name,email?access_token=>【ACCESS_TOKEN】  
とすることでメールアドレスを取得することができました。

具体的には、 Opauth の場合だと、

/lib/Opauth/Strategy/Facebook/FacebookStrategy.phpの

[code]

    $me = $this->serverGet('https://graph.facebook.com/me', array('access_token' => $access_token), null, $headers);
    
[/code]

を

[code]

    $me = $this->serverGet('https://graph.facebook.com/me', array('fields' => 'id,name,email','access_token' => $access_token), null, $headers);
    
[/code]

にすることで取得できると思います。


CC BY-SA 3.0
2015-09-09T12:40:17.287
16447
2015-09-09T12:40:17.287
10545
16286
answer