2015-07-13 7 views
3

Am использованием yii2-authclient для facebook входа в систему для моего сайта, я получаю ответ, как этотYii2 authclient не возвращает идентификатор электронной почты пользователя

yii\authclient\clients\Facebook Object ([authUrl] => https://www.facebook.com/dialog/oauth?display=popup [tokenUrl] => https://graph.facebook.com/oauth/access_token [apiBaseUrl] => https://graph.facebook.com [scope] => email [version] => 2.0 [clientId] => *******[clientSecret] => ********[_returnUrl:yii\authclient\BaseOAuth:private] => http://www.usermodule.com/index.php?r=site%2Fauth&authclient=facebook [_curlOptions:yii\authclient\BaseOAuth:private] => Array () [_accessToken:yii\authclient\BaseOAuth:private] => yii\authclient\OAuthToken Object ([tokenParamKey] => access_token [tokenSecretParamKey] => oauth_token_secret [createTimestamp] => 1436772538 [_expireDurationParamKey:yii\authclient\OAuthToken:private] => [_params:yii\authclient\OAuthToken:private] => Array ([access_token] => ****************************** [expires] => 5182933)) [_signatureMethod:yii\authclient\BaseOAuth:private] => Array () [_id:yii\authclient\BaseClient:private] => facebook [_name:yii\authclient\BaseClient:private] => [_title:yii\authclient\BaseClient:private] => [_userAttributes:yii\authclient\BaseClient:private] => [_normalizeUserAttributeMap:yii\authclient\BaseClient:private] => [_viewOptions:yii\authclient\BaseClient:private] => [_events:yii\base\Component:private] => Array () [_behaviors:yii\base\Component:private] =>) Array ([name] => **** [id] => *****) 

Это мой конфиг

'authClientCollection' => [ 
    'class' => 'yii\authclient\Collection', 
    'clients' => [ 
     'facebook' => [ 
      'class' => 'yii\authclient\clients\Facebook',    
      'clientId' => '***', 
      'clientSecret' => '****', 

     ], 
    ], 
] 

Am смог получить имя пользователя, идентификатор пользователя, но не адрес электронной почты пользователя почему? Что еще мне нужно делать?

ответ

3

Да, наконец, получил решение,

когда вы делаете запрос график апи

$this->makeSignedRequest('me'); 

заменить его

$this->makeSignedRequest('me?fields=id,name,email'); 

либо вы делаете с помощью facebook или с использованием SDK yii2- расширение eauth, как я. если вы используете yii2-eauth, то вам нужно изменить в поставщика/nodge/yii2-eauth/SRC/услуги/FacebookOAuth2Service.php

затем добавить эту строку атрибут электронной почты

$this->attributes['email'] = $info['email']; 

Примечание : Я пробовал yii путь прохождения аргумента, как

не работал для меня.

Источник решения: https://developers.facebook.com/docs/php/howto/example_retrieve_user_profile/5.0.0

+0

легко модифицировать передающие аргументы и будет работать '$ info = $ this-> makeSignedRequest ('me', array ( 'query' => array ( 'fields' => 'email, name, birthday, gender, link , first_name, last_name, age_range ', ), )); ' –

+0

когда звонить $ this-> makeSignedRequest? SiteController? –

0
for using Yii2-authclient you have to configure(main.php) like that:- 
    inside components array write 
    'authClientCollection' => [ 
      'class' => 'yii\authclient\Collection', 
      'clients' => [ 
       'facebook' => [ 
        'class' => 'yii\authclient\clients\Facebook', 
        'clientId' => 'your Client-Id', 
        'clientSecret' => 'your Client-secret', 
       ], 

      ], 
     ], 
    in controller inside actions method write:- 
    auth' => [ 
       'class' => 'yii\authclient\AuthAction', 
       'successCallback' => [$this, 'successCallback'], 
       ], 

then create successCallback function like 
public function successCallback($client) 
     { 
      $attributes= $client->getUserAttributes(); 
      print_r($attributes); 
} 
then you got all attributes which are shared by Facebook(like email, firstname etc). 
+0

Пожалуйста, прочитайте мой вопрос еще раз, я получаю ответ от Facebook, который я разделяемой на мой вопрос, но в том, что я не получаю email – user3377747

+0

замените вашу конфигурацию заданным решением, затем проверьте – sprytechies

+0

Готово! Ответ, который я получил, был Array ([name] => ****** [id] => *****). Нет электронной почты ID – user3377747

0
'facebook' => [ 
    'class' => 'yii\authclient\clients\Facebook', 
    'clientId' => '****', 
    'clientSecret' => '*****', 
], 

Этого достаточно. Но когда-нибудь вы все еще не можете получить адрес электронной почты, потому что какой-то пользователь facebook не имеет адрес электронной почты:

  • facebook регистр пользователя по телефону
  • facebook регистр пользователя по электронной почте, но адрес электронной почты не проверено

Вы должны поймать его, чтобы уведомить пользователя.

Я не знаю никаких других исключений. если у пользователя есть электронное письмо, но ваше приложение не может получить этот адрес электронной почты, давайте проверим разрешение email в списке Approved Items на странице «статус и обзор» на facebook-разработчике, чтобы узнать почему. https://developers.facebook.com/apps/YOUR_APP_ID/review-status/

+0

У меня есть учетная запись fb по электронной почте Идентификатор, я протестировал с моей учетной записью друга также то же самое не письмо в ответ. Подтвержденные по умолчанию сообщения электронной почты, общедоступного профиля, user_friends подтверждены по умолчанию. – user3377747

2

Я получил решение с помощью указанных выше решений.

В yii2-authclient/clients/Facebook.PHP существует функция initUserAttributes(), в которой

return $this->api('me', 'GET'); 

заменить его

return $this->api('me?fields=id,name,email', 'GET');