Перейти к основному содержимому

Авторизация

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

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

Прежде чем приступим к уроку, нужно сделать два отступления.

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

В этом уроке содержится инструкция о том, как читать данные из таблицы, если они не являются исключительно цифрами. То есть, логин может представлять из себя набор букв — janedoe, или набор букв и цифр — Maria1965. Но если логин (либо пароль) содержит исключительно цифры и ни одной буквы, например, 135523, то вам потребуется немного более сложная инструкция, которую мы пока не будем разбирать.

Итак, приступим

  1. Начнем с создания таблицы.

Создайте таблицу с колонками: login

password

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

Напишите в таблице несколько значений логина и пароля. Избегайте значений, состоящих исключительно из цифр.

  1. Добавьте в сценарий блок text to $var.

Напишите в нем текст: Введите логин.И напишите переменную: entry

Варианты размещения этого экрана

  • Если вы хотите, чтобы бот начинал сессию с этого экрана, то этот экран должен быть стартовым — то есть, должен быть самым левым и самым верхним.

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

  1. Подготовим таблицу.
  • Опубликуйте таблицу:

Файл → Опубликовать в интернете → Опубликовать → Ок.Закройте всплывающее окно.

Путь из всплывающего окна копировать не нужно.

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

  • Откройте блокнот и скопируйте туда ссылку, которая должна иметь следующий вид:

https://tools.aimylogic.com/api/googlesheet2json?sheet=<название_листа>&id=<id_таблицы>

  • Затем найдите в пути страницы данный элемент:

Это идентификатор документа. Скопируйте его и вставьте в блокнот после той строки, которую вы вставили в блокнот ранее. Затем скопируйте все, что получилось в блокноте. Эту ссылку нужно будет использовать в HTTP-запросе на следующем шаге.

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

  1. Создайте HTTP-запрос.

Свяжите «Переход после ввода $entry» с новым блоком HTTP-запрос:

Параметры HTTP-запроса: метод Get; в URL используйте ссылку, которую получили шагом выше.на вкладке RESPONSE напишите название переменной: userи значение: _.findWhere($httpResponse, {login: $entry}) вкладки BODY и HEADERS заполнять не нужно.

Нажмите Сохранить.

С помощью этого HTTP-запроса мы получим всю информацию, которая есть у нас в таблице. То есть, сам запрос еще не проверяет, верный логин или нет. Он только делает запрос к URL. Если таблица опубликована как описано в инструкции по чтению данных из Google Таблиц, то запрос будет успешным, даже если пользователь ввел логин неверно. Поэтому мы будем проверять логин на следующих шагах.

А сейчас же мы просто запрашиваем всю информацию из Google Таблиц. Также, http-запрос ищет в Google Таблицах введенный вами логин с помощью _.findWhere($httpResponse, {login: $loginentry}). Если логин присутствует в таблице, он помещает его в переменную $user. Но успешное завершение запроса вовсе не означает, что логин действительно был в таблице.

  1. От варианта Завершен с ошибкой сделайте связь с блоком Текст, где напишите: Ошибка чтения логина $httpStatus

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

  1. От варианта Завершен успешно сделайте связь с блоком Условие и напишите в него: $user

Это условие будет проверять, записалось ли что-либо в переменную $user, то есть, был ли найден введенный пользователем логин. Если логин был найден, то в переменной будет содержание, и условие отработает. Если нет, то будет отрабатывать else.

  1. От else блока Условие сделайте связь с текстовым блоком с текстом: Такого логина нет. Попробуйте еще раз.

Добавьте на этот экран кнопку «попробовать еще» и свяжите ее с экраном запроса логина:

  1. От блока условий сделайте связь с блоком text to $var, в котором напишите: Введите пароль.

и переменную: passwordentry

  1. Свяжите «Переход после ввода $passwordentry» с новым блоком Условия, на котором будем сравнивать введенный пароль с содержанием ячейки, которая соответствует введенному логину и находится в колонке password: $user.password === $passwordentry

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

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

Также можем еще раз вывести значения логина и пароля.

Добро пожаловать! Ваш логин: $user.login Ваш пароль: $user.password

От else сделайте связь с текстовым блоком с текстом: Пароль неверный.

Добавьте на него кнопку «попробовать еще» и свяжите ее с экраном ввода пароля:

Готово!

Теперь бот может проверять, есть ли в колонке login таблицы значение логина, введенное пользователем. Затем он может проверить, соответствует ли введенный пользователем пароль ячейке password, находящейся рядом с введенным логином.

Ознакомьтесь с другими уроками по использованию Google Таблиц: