Статьи

Как программировать с Yii2: аутентификация Google

Конечный продукт
Что вы будете создавать

Если вы спрашиваете: «Что такое Yii?» Ознакомьтесь с разделом Введение в Yii Framework , в котором рассматриваются преимущества Yii и представлен обзор Yii 2.0.

В этой серии «Программирование с Yii2» я расскажу читателям, как использовать Yii2 Framework для PHP. В этом руководстве я продолжу рассказывать об интеграции встроенного AuthClient с использованием API учетных записей Google и OAuth 2.0.

Возможно, вам будет полезно ознакомиться с Программирование с помощью Yii2: интеграция регистрации пользователей , в которой рассматривается интеграция библиотеки Yii2-User для регистрации и аутентификации пользователей, и Программирование с использованием Yii2: интеграция AuthClient с Twitter, Google и другими сетями , в которой рассматривается интеграция. с аутентификацией в Twitter и устаревшей поддержкой Google OpenID . Из этого туториала вы узнаете, как перейти от более ранней интеграции Google OpenID к интеграции OAuth 2.0 с API учетных записей Google.

Для этих примеров мы продолжим основываться на фреймворке для серии, нашей привет кодовой базе. Используйте ссылки GitHub на этой странице, чтобы получить загрузку для хранилища кода.

Прежде чем мы начнем, пожалуйста, помните, я стараюсь участвовать в обсуждениях ниже. Если у вас есть вопрос или предложение по теме, пожалуйста, оставьте комментарий ниже или свяжитесь со мной в Twitter @reifman . Вы также можете написать мне напрямую.

Если вы заметили, что в этой серии произошла задержка, это потому, что я недавно вернулся из операции на мозге . Спасибо за ваше терпение и поддержку — приятно регулярно писать снова, и я с нетерпением жду продолжения освещения Yii2.

С тех пор, как я в последний раз писал об этих темах, пользователь Yii2 значительно улучшился. Первое, что нам нужно сделать, это обновить его библиотеку. Вы можете сделать это с помощью composer в командной строке:

1
composer require «dektrium/yii2-user:0.9.*@dev»

Это автоматически обновит composer.json:

01
02
03
04
05
06
07
08
09
10
11
«minimum-stability»: «stable»,
   «require»: {
       «php»: «>=5.4.0»,
       «yiisoft/yii2»: «*»,
       «yiisoft/yii2-bootstrap»: «*»,
       «yiisoft/yii2-swiftmailer»: «*»,
       «dektrium/yii2-user»: «0.9.*@dev»,
       «stichoza/google-translate-php»: «~2.0»,
       «yiidoc/yii2-redactor»: «2.0.0»,
       «yiisoft/yii2-authclient»: «*»,
   },

После этого запустите последние миграции баз данных для пользователя Yii2 — это обновит вашу базу данных до последней версии библиотеки:

1
php yii migrate/up —migrationPath=@vendor/dektrium/yii2-user/migrations

Вы, вероятно, увидите что-то вроде этого:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ php yii migrate/up —migrationPath=@vendor/dektrium/yii2-user/migrations
Yii Migration Tool (based on Yii v2.0.6)
 
Total 4 new migrations to be applied:
    m141222_110026_update_ip_field
    m141222_135246_alter_username_length
    m150614_103145_update_social_account_table
    m150623_212711_fix_username_notnull
 
Apply the above migrations?
*** applying m141222_110026_update_ip_field
    > alter column registration_ip in table {{%user}} to string(45) … done (time: 0.009s)
*** applied m141222_110026_update_ip_field (time: 0.030s)
 
*** applying m141222_135246_alter_username_length
    > alter column username in table {{%user}} to string(255) … done (time: 0.010s)
*** applied m141222_135246_alter_username_length (time: 0.012s)
 
*** applying m150614_103145_update_social_account_table
    > add column code string(32) to table {{%social_account}} … done (time: 0.008s)
    > add column created_at integer to table {{%social_account}} … done (time: 0.009s)
    > add column email string to table {{%social_account}} … done (time: 0.008s)
    > add column username string to table {{%social_account}} … done (time: 0.009s)
    > create unique index account_unique_code on {{%social_account}} (code) … done (time: 0.016s)
*** applied m150614_103145_update_social_account_table (time: 0.059s)
 
*** applying m150623_212711_fix_username_notnull
    > alter column username in table {{%user}} to string(255) NOT NULL … done (time: 0.009s)
*** applied m150623_212711_fix_username_notnull (time: 0.011s)
 
 
Migrated up successfully.

Вы также должны переместить определение компонента для пользователя yii2 в модули в \ hello \ config \ web.php:

01
02
03
04
05
06
07
08
09
10
11
12
13
‘modules’ => [
         ‘redactor’ => ‘yii\redactor\RedactorModule’,
         ‘class’ => ‘yii\redactor\RedactorModule’,
         ‘uploadDir’ => ‘@webroot/uploads’,
         ‘uploadUrl’ => ‘/hello/uploads’,
         ‘user’ => [
               ‘class’ => ‘dektrium\user\Module’,
               ‘enableUnconfirmedLogin’ => TRUE,
               ‘confirmWithin’ => 21600,
               ‘cost’ => 12,
               ‘admins’ => [‘admin’]
             ],
     ],

Чтобы пользователи вашего приложения Yii2 могли зарегистрироваться и войти в систему со своими учетными записями Google, вам необходимо зарегистрировать проект Google на консоли разработчика :

Программирование Yii2 Консоль разработчиков Google

Давайте создадим проект с именем yii2hello:

Программирование Yii2 Консоль разработчиков Google Новый проект

Вы попадете на домашнюю страницу проекта с различными опциями в меню левой боковой панели:

Программирование Yii2 Главная страница проекта консоли разработчиков Google

Важно запросить доступ к тем группам API в Google, которые мы можем использовать. Для пользователя Yii2 нам нужно включить API Google+. Нажмите на API & auth> API и выполните поиск в Google + :

Программирование Yii2 Консоль разработчиков Google Search

Затем нажмите Включить API :

Программирование Yii2 Google Developer Console Enable API

Вы увидите список включенных API, который теперь включает Google+ API :

Программирование Yii2 API Списка Консолей Разработчиков Google

Затем нам нужно добавить учетные данные, чтобы мы могли аутентифицировать наши запросы API с Google для действий этого проекта. Нажмите Учетные данные :

Программирование Yii2 Учетные данные консоли разработчиков Google

Давайте использовать опцию идентификатора клиента OAuth 2.0 выше. Затем вам будет предложено создать экран согласия OAuth и заполнить информацию о вашем приложении, которая будет представлена ​​пользователям, пытающимся зарегистрироваться или войти в систему с вашим приложением:

Программирование Yii2 Консоль разработчика Google OAuth Consent

На странице « Учетные данные» мы выберем веб-приложение , и, поскольку мы проводим локальное тестирование, мы предоставим две настройки для обратных вызовов аутентификации. Я использую порт 8888 для локальной разработки. Итак, мой авторизованный источник JavaScript будет http: // localhost: 8888, а пользователю Yii2 требуется путь авторизованного URI перенаправления http: // localhost: 8888 / hello / user / security / auth? Authclient = google .

Программирование Yii2 Настройки проекта для консоли разработчиков Google

Вам будут представлены ключи API, также известные как идентификатор клиента и секрет клиента :

Я расскажу, где разместить эти ключи ниже.

В разделе Защита ваших ключей от GitHub я подробно описал, как я использую файл конфигурации для хранения всех моих ключей, кроме моего репозитория GitHub. Затем я включаю этот файл в начало моих файлов конфигурации Yii. Это удерживает меня от случайной проверки моих ключей к моему хранилищу и взлома моих учетных записей.

В моем файле /var/secure/hello.ini я храню все ключи для своего приложения, а также /var/secure/hello.ini здесь ключи Google API:

01
02
03
04
05
06
07
08
09
10
11
oauth_google_clientId=»41xxxxxxxxxxxxxeusercontent.com»
oauth_google_clientSecret=»LmxxxxxxxxxxxxxxxxxxxxxxFJ4″
oauth_twitter_key =»rxkxxxxxxxxxxxxxxxxxopjU»
oauth_twitter_secret=»b7gU4twxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkLy0z2e»
smtp_host = «mailtrap.io»
smtp_username = «2xxxxxxxxxxxxxxxxx2»
smtp_password = «2xxxxxxxxxxxxxxxxx5»
mysql_host=»localhost»
mysql_un=»xxxxxxxxxxxx»
mysql_db=»hello»
mysql_pwd=»xxxxxxxxxxxx»

Нам нужно добавить ссылки на эти ключи в настройках конфигурации AuthClient в нашем файле веб-конфигурации в \config\web.php . Добавьте элементы массива для всех сторонних сервисов, которые вы хотите поддерживать:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
$config = parse_ini_file(‘/var/secure/hello.ini’, true);
$params = require(__DIR__ . ‘/params.php’);
$config = [
    ‘id’ => ‘basic’,
    ‘basePath’ => dirname(__DIR__),
    ‘bootstrap’ => [‘log’],
    ‘language’=>’en’, // back to English
    ‘components’ => [
      ‘view’ => [
              ‘theme’ => [
                  ‘pathMap’ => [
                      ‘@dektrium/user/views’ => ‘@app/views/user’
                  ],
              ],
          ],
      ‘authClientCollection’ => [
              ‘class’ => ‘yii\authclient\Collection’,
              ‘clients’ => [
                  ‘google’ => [
                      ‘class’ => ‘dektrium\user\clients\Google’,
                      ‘clientId’ => $config[‘oauth_google_clientId’],
                      ‘clientSecret’ => $config[‘oauth_google_clientSecret’],
                  ],
                  ‘twitter’ => [
                                  ‘class’ => ‘yii\authclient\clients\Twitter’,
                                  ‘consumerKey’ => $config[‘oauth_twitter_key’] ,
                                  ‘consumerSecret’ => $config[‘oauth_twitter_secret’] ,
                              ],
                ],
        ],

Кроме того, в разделе «Введение в MailTrap: поддельный SMTP-сервер для предпроизводственного тестирования электронной почты приложения» я начал интегрировать пользовательские настройки SMTP MailTrap в свою конфигурацию Yii SwiftMailer для целей тестирования. Это обеспечит получение электронных писем о регистрации при регистрации на нашей локальной платформе разработки.

Настройки MailTrap SMTP

Для этого урока я обнаружил, что мне нужно обновить информацию о порте для SwiftMailer до 2525 в \config\web.php :

01
02
03
04
05
06
07
08
09
10
11
12
13
‘mailer’ => [
               ‘class’ => ‘yii\swiftmailer\Mailer’,
               ‘viewPath’ => ‘@app/mailer’,
               ‘useFileTransport’ => false,
               ‘transport’ => [
                   ‘class’ => ‘Swift_SmtpTransport’,
                   ‘host’ => $config[‘smtp_host’],
                   ‘username’ => $config[‘smtp_username’],
                   ‘password’ => $config[‘smtp_password’],
                   ‘port’ => ‘2525’,
                   ‘encryption’ => ‘tls’,
                               ],
           ],

Теперь мы, наконец, готовы исследовать, используя интерфейс пользователя Yii2. Начнем с регистрации. Нажмите на кнопку Зарегистрироваться в меню, и вы увидите эту форму:

Yii2 User Hello App Регистрация

Чтобы зарегистрироваться на все, что мы создали сегодня, нажмите значок Google+. Поскольку я вошел только в одну учетную запись Google, появится прозрачное всплывающее окно и перенаправление для завершения моей регистрации:

Привет, приложение пользователя Yii2 Регистрация Завершение

Вы должны увидеть домашнюю страницу, показывающую, что вы прошли аутентификацию в правом верхнем углу:

Привет, пользователь приложения Yii2

Нажмите « Выйти», а затем мы можем попытаться войти с помощью значка Google+. Нажмите Войти в верхнем меню:

Yii2 User Hello App Войти

Затем снова нажмите значок Google+ . Вы попадете прямо на главный экран, показывающий, что вы вошли снова. Довольно круто, а? Но что, если вы вошли в две учетные записи Google?

Привет, приложение Yii2 User Войти с несколькими учетными записями

Когда вы выберете свою учетную запись Google для входа, вы вернетесь на домашнюю страницу в режиме аутентификации.

Хотя он еще не настроен в нашем заголовочном меню Bootstrap, если вы посетите http://localhost:8888/hello/user/settings/networks , вы увидите новый интерфейс подключения для сторонних учетных записей в Yii2 User:

Yii2 Пользователь Hello App Сеть Страница для подключения

После входа ваши пользователи могут подключаться и отключать свои социальные учетные записи отсюда. Там также есть учетная запись и профиль пользователя. Это довольно красиво сделано.

Возможно, вы захотите проверить мою серию «Построение стартапа с помощью PHP» , в которой используется расширенный шаблон Yii2 со сторонней интеграцией, в настоящее время без Yii2 User. Однако теперь есть руководство по интеграции Yii2 User с расширенным шаблоном , поэтому я могу обновить его в ближайшее время.

Следите за будущими уроками в моей серии «Программирование с Yii2», поскольку я продолжаю изучать различные аспекты фреймворка.

Я приветствую тематические и тематические запросы. Вы можете опубликовать их в комментариях ниже или написать мне по электронной почте на моем сайте Lookahead Consulting .

Если вы хотите узнать, когда появится следующий учебник по Yii2, следуйте за мной @reifman в Твиттере или зайдите на страницу моего инструктора . Моя страница инструктора будет включать все статьи из этой серии, как только они будут опубликованы.