vorst.ru - Page 2. Статьи о задачах возникающих при создании сайта и их решении
Статьи помеченные Yii2

OAuth2 аутентификация на примере Google

Как работает аутентификация OAuth2

Если у вас есть аккаунт в Google, то вы наверняка пользовались документами. Например, электронными таблицами.

Доступ к таблицам разрешен только вам и тем, кому вы предоставите такое право. Причем доступ возможен не только из Google.

Можно просматривать список таблиц и редактировать выбранную таблицу оставаясь в рамках своего приложения. Примерно так - http://sample.vorst.ru/googl


Как разместить контент на двух языках

Перевод контента сайта

Для перевода интерфейса в Yii применяется таблица из двух колонок. В первой колонке записываются слова или фразы на английском, во второй - перевод на русском. Строки отсортированы по первой колонке. В тексте программы вместо нужного слова или фразы вызывается функция t('Word or Phrase'). Если текущий язык сайта английский, функция возвращает параметр, иначе соответствующий перевод.

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


Виджет для вывода списка рубрик Nested Set

Выбор всех статей по рубрике

В конце предыдущей статьи были указаны две вещи, которых не хватает для начала использования рубрикатора.

Первая из них - необходимо добавить поле rubric в таблицу post. С этой операцией связано и изменения в модели common/models/Post, которые очевидно касаются методов rules() и attributeLabels().

Кроме этого нужно добавить обработку выбранной пользователем рубрики в actionIndex() контроллера frontend/controllers/PostController.


Простые действия над деревом Nested Set

Что нужно учесть для CRUD

Все необходимые методы, для управления деревом Nested Set уже определены в расширении.

Поэтому изменения в стандартном контроллере совсем небольшие. Нужно, например, вместо стандартного метода save() модели использовать метод prependTo() расширения, а вместо delete(), deleteWithChildren().


Представления для операций с Nested Set

Что нужно учесть в представлениях при редактировании Nested Set

Мы, в общих чертах, разобрались с деревьями Nested Set и создали модель для хранения дерева. В модели определили пару простых методов.

Теперь нужно разобраться с тем, как добавлять новые рубрики. Начнем с представлений.


Подключение расширения Nested Set

Определение данных и необходимых методов в модели

Мы получили общее представление о древовидной структуре данных называемой Nested Set. Теперь пришло время подключить к блогу соответствующее расширение.

Поведение выполняет работу по добавлению новых элементов в дерево, поиск всех подчиненных элементов для данного узла, удаление узла. И многое другое, что может быть использовано, например, при работе с каталогами товаров.


Как устроена структура данных Nested Set

Как сделать рубрикатор

Рубрикатор, как средство поиска интересных статей, имеет свои недостатки - трудно придумать иерархию, названия рубрик, трудно потом решить к какой конкретно рубрике относится статья. "Но, так принято" - скажите вы и будете правы.

Поэтому, давайте делать рубрикатор.


Какую статью выбрать следующей или предыдущей

Как выбрать все статьи в цепочке

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

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


Цепочки статей в блоге

Можно ли сделать блог удобнее?

Ну, во-первых, удобнее по отношению к чему? К WordPress, например. Некоторое время назад я использовал эту программу для ведения блога.

Для группировки статей в WordPress существует возможность помечать статьи метками или прикреплять к наперед заданной рубрике. Кроме того, в конце статьи есть навигация - предыдущая, следующая статья, ну и меню конечно. Вроде все удобно.



Поиск



OAuth2 аутентификация на примере Google

Как работает аутентификация OAuth2

Если у вас есть аккаунт в Google, то вы наверняка пользовались документами. Например, электронными таблицами.

Доступ к таблицам разрешен только вам и тем, кому вы предоставите такое право. Причем доступ возможен не только из Google.

Можно просматривать список таблиц и редактировать выбранную таблицу оставаясь в рамках своего приложения. Примерно так - http://sample.vorst.ru/googl


    Поделиться

Для доступа к эектронным таблицам разработано Google Sheets API, доступное в двух вариантах - клиентская библиотека и REST API.

Оба варианта выполняют одну и туже работу. Во многом выбор зависит от решаемой задачи.

В простых задачах, например - получить список таблиц, которые принадлежат пользователю, проще использовать REST API.

Если же необходимо активно работать с таблицей - читать построчно, проводить вычисления, сохранять результаты, то, наверное, лучше использовать библиотеку.

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

Сделать это не сложно используя подробную, пошаговую инструкцию - Setting up OAuth 2.0.

При создании проекта автоматически будет создана пара значений, которая понадобится при прохождении авторизации - Client ID и Client secret.

Еще один параметр - Authorized redirect URIs, вы должны ввести самостоятельно. Это адреса в вашем приложении, куда будут возвращаться результаты запросов на авторизацию. Адрес может быть один или несколько. Во-первых это удобно при отладке - можно указать локальный адрес. Во-вторых - процесс авторизации состоит из двух этапов и для каждого может быть задан свой адрес.

Итак, для авторизации необходимо:

  1. иметь аккаунт на сайте Google;
  2. создать проект с помощью консоли разработчика;
  3. сохранить Cliend ID и Client secret;
  4. ввести Authorized redirect URIs для обработки значений, полученных в процессе авторизации.

Как проходит авторизация?

Сначала отправляется запрос Google для получения кода авторизации. В качастве параметров отправляются Client ID и Authorized redirect URI. Результат запроса - Authorization code, Google отправляет вашему приложению по адресу Authorized redirect URI.

Получив Authorization code приложение отправляет еще один запрос - на получение токена. При этом, к уже упомянутым параметрам, добавляются еще Client secret и только что полученный Authorization code.

В результате получаем Access token по адресу, указанному в Authorized redirect URIs. Если все сделано верно, то можно отправлять Google любой запрос, передавая Access token в качестве параметра.

Например, запрос:

https://spreadsheets.google.com/feeds/spreadsheets/private/full

вернет список ваших таблиц в Google в формате xml.

Текст программы на github.

Заключение

Протокол OAuth2 позволяет авторизоваться на удаленном сервисе. Сервис должен поддерживать данный протокол. После авторизации возможно получение необходимых данных.

Оставить комментарий

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