Twitter API: не получает электронную почту пользователя - Yii2

Я получаю ошибку вроде

Неизвестное свойство – yii\base\UnknownPropertyException

Установка неизвестного свойства: yii\authclient\clients\Twitter::requestEmail

Всякий раз, когда я включаю 'requestEmail' => 'true', в 'authClientCollection' => [ вместо components в web.php

web.php

$config = [
  .
    .
  'components' => [
        .
        .
        'authClientCollection' => [
        'class' => 'yii\authclient\Collection',
        'clients' => [
        'twitter' => [
          'class' => 'yii\authclient\clients\Twitter',
          'requestEmail' => 'true',
          'consumerKey' => 'IFK2OMG0rKIFK2Jt4rLvw',
          'consumerSecret' => 'ImTprQzaOMG0rKZsZiPDIvwIFK2aOMG0rKZsZiPD',
        ],
      ],
    ],
],

UsersController.php (контроллер)

class UsersController extends CommonController 
{
    .
    .
    public function actions() {
    return [
      .
      .
      'auth' => [
        'class' => 'yii\authclient\AuthAction',
        'successCallback' => [$this, 'oAuthSuccess'],
      ],
    ];
  }

    .
    .
    public function oAuthSuccess($client) {
      // get user data from client
      $userAttributes = $client->getUserAttributes();
      var_dump($userAttributes); die;
      // do some thing with user data. for example with $userAttributes['email']
  }

}

login.php (Просмотр)

.
.
<p class="text-center">
    <?= yii\authclient\widgets\AuthChoice::widget([
        'baseAuthUrl' => ['/users/users/auth']
   ]) ?>
</p>
.
.

Но, как только я опускаю строку 'requestEmail' => 'true', из web.php. Это работает. Я получаю все необходимые данные, кроме email. Но проблема: я не получаю email пользователей, пытающихся войти в систему. Любая идея, как я могу получить. Любой намек/предложение будет большой помощью для меня. Спасибо.


person Nana Partykar    schedule 29.03.2016    source источник
comment
Я думаю, что теперь можно получить электронную почту пользователя, попробуйте следующее: stackoverflow.com/a/33867823/386579   -  person shasi kanth    schedule 29.03.2016
comment
Да @shasikanth: я отправил этот запрос. Ожидание подтверждения. Давай посмотрим что происходит . Спасибо..   -  person Nana Partykar    schedule 29.03.2016
comment
Привет, @shasikanth. Я получил письмо из твиттера с текстом Запросить доступ к электронной почте. Я следовал шагу, который они заявили в почте. Но, хотя я не могу получить доступ к email. Есть ли у вас какие-либо идеи по этому поводу. ?   -  person Nana Partykar    schedule 30.03.2016
comment
Не уверен, почему он не может получить электронную почту. Может быть, вы пытаетесь на своем локальном хосте. Также попробуйте с любым общедоступным URL.   -  person shasi kanth    schedule 30.03.2016
comment
Можете ли вы попробовать один и тот же профиль в Твиттере или разные? Может быть профиль без электронной почты (например, зарегистрированный по номеру телефона).   -  person jekaby    schedule 30.03.2016
comment
Привет @jekaby: я нашел решение. Даже я разместил это как ответ. Теперь я получаю значение email. Спасибо за ответ.   -  person Nana Partykar    schedule 30.03.2016


Ответы (1)


Наконец-то я понял.

Этот ответ предназначен для тех, кто только что установил Twitter API или застрял на полпути.

Следуйте шаг за шагом.

1) Если вы уже создали «Ключ потребителя (ключ API)» и «Секрет потребителя (секрет API)». Затем перейдите непосредственно к пункту 5. В противном случае выполните эту команду php composer.phar require --prefer-dist yiisoft/yii2-authclient "*" в своей системе. И сгенерируйте «Ключ потребителя (ключ API)» и «Секрет потребителя (секрет API)». Подпишитесь на Создайте новое приложение и Документация по приложению Twitter

2) В web.php

$config = [
        .
          .
        'components' => [
              .
              .
              'authClientCollection' => [
              'class' => 'yii\authclient\Collection',
              'clients' => [
                'twitter' => [
                  'class' => 'yii\authclient\clients\Twitter',
                  'consumerKey' => 'Generated Consumer Key (API Key)',
                  'consumerSecret' => 'Generated Consumer Secret (API Secret)',
                ],
             ],
          ],
    ],

3) В YourController.php (Контроллер): добавьте раздел auth в функцию actions() и функцию oAuthSuccess($client) (как я объявил)

class UsersController extends CommonController 
    {
          .
          .
          public function actions() {
                return [
                  .
                  .
                  'auth' => [
                    'class' => 'yii\authclient\AuthAction',
                    'successCallback' => [$this, 'oAuthSuccess'],
                  ],
                ];
            }

          .
          .
          public function oAuthSuccess($client) {
            // get user data from client
            $userAttributes = $client->getUserAttributes();
            var_dump($userAttributes); die;
            // do some thing with user data. for example with  $userAttributes['email']
          }
          .
          .

    }

4) В YourView.php (представление)

<?= yii\authclient\widgets\AuthChoice::widget([
    'baseAuthUrl' => ['/users/users/auth']
]) ?>

5) Отправьте в Twitter тикет в службу поддержки, чтобы ваше приложение было добавлено в белый список. Выберите I need access to special permissions и заполните необходимое поле и отправьте его.

6) Через несколько минут/часов вы получите электронное письмо с указанием/темой "Запросить доступ к электронной почте.". В письме будет указано, что вам нужно войти на apps.twitter.com.

После успешного входа в систему,

  • нажмите на свой Application Name.
  • Перейдите на вкладку "Настройки", заполните Privacy Policy URL и Terms of Service URL текстовых полей. Сохраните его с помощью кнопки Update Settings.
  • Перейдите на вкладку "Разрешения" и установите флажок Request email addresses from users. И сохраните его с помощью кнопки Update Settings.
  • Перейдите на вкладку "Ключи и токены доступа" и снова "Повторно создать ключ и секрет потребителя" в разделе Application Actions.
  • После перегенерации Consumer Key (API Key) и Consumer Secret (API Secret) сохраните их в файле Web.php.
  • Не забудьте следовать последним 2 пунктам в этом разделе.

В конце,

7) Перейти к подкаталогам:

Root Folder -> vendor -> yiisoft -> yii2-authclient -> clients -> Twitter.php

Twitter.php

Изменять

protected function initUserAttributes()
{
    return $this->api('account/verify_credentials.json', 'GET');
}

To

protected function initUserAttributes()
{
    return $this->api('account/verify_credentials.json', 'GET', ['include_email' => 'true']);
}

[Примечание. Я использую Yii2-App-Basic. В Yii2-App-Advanced изменится только путь к файлу. ]

Похожий поиск:

person Nana Partykar    schedule 30.03.2016