Если вы спрашиваете: «Что такое 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
С тех пор, как я в последний раз писал об этих темах, пользователь 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’]
],
],
|
Зарегистрируйте свой проект Google
Чтобы пользователи вашего приложения Yii2 могли зарегистрироваться и войти в систему со своими учетными записями Google, вам необходимо зарегистрировать проект Google на консоли разработчика :
Давайте создадим проект с именем yii2hello:
Вы попадете на домашнюю страницу проекта с различными опциями в меню левой боковой панели:
Важно запросить доступ к тем группам API в Google, которые мы можем использовать. Для пользователя Yii2 нам нужно включить API Google+. Нажмите на API & auth> API и выполните поиск в Google + :
Затем нажмите Включить API :
Вы увидите список включенных API, который теперь включает Google+ API :
Затем нам нужно добавить учетные данные, чтобы мы могли аутентифицировать наши запросы API с Google для действий этого проекта. Нажмите Учетные данные :
Давайте использовать опцию идентификатора клиента OAuth 2.0 выше. Затем вам будет предложено создать экран согласия OAuth и заполнить информацию о вашем приложении, которая будет представлена пользователям, пытающимся зарегистрироваться или войти в систему с вашим приложением:
На странице « Учетные данные» мы выберем веб-приложение , и, поскольку мы проводим локальное тестирование, мы предоставим две настройки для обратных вызовов аутентификации. Я использую порт 8888 для локальной разработки. Итак, мой авторизованный источник JavaScript будет http: // localhost: 8888, а пользователю Yii2 требуется путь авторизованного URI перенаправления http: // localhost: 8888 / hello / user / security / auth? Authclient = google .
Вам будут представлены ключи API, также известные как идентификатор клиента и секрет клиента :
Я расскажу, где разместить эти ключи ниже.
Настройка поддержки AuthClient
В разделе Защита ваших ключей от 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 для целей тестирования. Это обеспечит получение электронных писем о регистрации при регистрации на нашей локальной платформе разработки.
Для этого урока я обнаружил, что мне нужно обновить информацию о порте для 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’,
],
],
|
Регистрация с вашей учетной записью Google
Теперь мы, наконец, готовы исследовать, используя интерфейс пользователя Yii2. Начнем с регистрации. Нажмите на кнопку Зарегистрироваться в меню, и вы увидите эту форму:
Чтобы зарегистрироваться на все, что мы создали сегодня, нажмите значок Google+. Поскольку я вошел только в одну учетную запись Google, появится прозрачное всплывающее окно и перенаправление для завершения моей регистрации:
Вы должны увидеть домашнюю страницу, показывающую, что вы прошли аутентификацию в правом верхнем углу:
Вход с помощью вашей учетной записи Google
Нажмите « Выйти», а затем мы можем попытаться войти с помощью значка Google+. Нажмите Войти в верхнем меню:
Затем снова нажмите значок Google+ . Вы попадете прямо на главный экран, показывающий, что вы вошли снова. Довольно круто, а? Но что, если вы вошли в две учетные записи Google?
Когда вы выберете свою учетную запись Google для входа, вы вернетесь на домашнюю страницу в режиме аутентификации.
Профиль пользователя и область подключения
Хотя он еще не настроен в нашем заголовочном меню Bootstrap, если вы посетите http://localhost:8888/hello/user/settings/networks
, вы увидите новый интерфейс подключения для сторонних учетных записей в Yii2 User:
После входа ваши пользователи могут подключаться и отключать свои социальные учетные записи отсюда. Там также есть учетная запись и профиль пользователя. Это довольно красиво сделано.
Возможно, вы захотите проверить мою серию «Построение стартапа с помощью PHP» , в которой используется расширенный шаблон Yii2 со сторонней интеграцией, в настоящее время без Yii2 User. Однако теперь есть руководство по интеграции Yii2 User с расширенным шаблоном , поэтому я могу обновить его в ближайшее время.
Что дальше?
Следите за будущими уроками в моей серии «Программирование с Yii2», поскольку я продолжаю изучать различные аспекты фреймворка.
Я приветствую тематические и тематические запросы. Вы можете опубликовать их в комментариях ниже или написать мне по электронной почте на моем сайте Lookahead Consulting .
Если вы хотите узнать, когда появится следующий учебник по Yii2, следуйте за мной @reifman в Твиттере или зайдите на страницу моего инструктора . Моя страница инструктора будет включать все статьи из этой серии, как только они будут опубликованы.