Авторизация
Авторизация по логину и паролю — популярная задача, решение которой может не только обеспечить вам более высокий уровень безопасности, но и научить работать с таблицами для решения других задач.
В этом уроке вы научитесь обеспечивать авторизацию пользователей по логину и паролю.
Прежде чем приступим к уроку, нужно сделать два отступления.
В этом уроке содержится инструкция о том, как читать данные из таблицы, если они не являются исключительно цифрами. То есть, логин может представлять из себя набор букв — janedoe, или набор букв и цифр — Maria1965. Но если логин (либо пароль) содержит исключительно цифры и ни одной буквы, например, 135523, то вам потребуется немного более сложная инструкция, которую мы пока не будем разбирать.
Итак, приступим
- Начнем с создания таблицы.
Создайте таблицу с колонками: login
password
Скопируйте и вставьте эти названия колонок в таблицу. Если вы допустите здесь ошибку, данный сценарий работать не будет.
Напишите в таблице несколько значений логина и пароля. Избегайте значений, состоящих исключительно из цифр.
- Добавьте в сценарий блок
text to $var
.
Напишите в нем текст: Введите логин.
И напишите переменную: entry
Варианты размещения этого экрана
- Если вы хотите, чтобы бот начинал сессию с этого экрана, то этот экран должен быть стартовым — то есть, должен быть самым левым и самым верхним.
- Если вам нужна авторизация для доступа к определенным частям сценария, то свяжите предыдущий экран с этим экраном с помощью кнопки, блока Переход или Интента.
- Подготовим таблицу.
- Опубликуйте таблицу:
Файл → Опубликовать в интернете → Опубликовать → Ок.Закройте всплывающее окно.
Путь из всплывающего окна копировать не нужно.
Публиковать страницу нужно только один раз. Вам не нужно снова публиковать страницу после внесения в нее изменений.
- Откройте блокнот и скопируйте туда ссылку, которая должна иметь следующий вид:
https://tools.aimylogic.com/api/googlesheet2json?sheet=<название_листа>&id=<id_таблицы>
- Затем найдите в пути страницы данный элемент:
Это идентификатор документа. Скопируйте его и вставьте в блокнот после той строки, которую вы вставили в блокнот ранее. Затем скопируйте все, что получилось в блокноте. Эту ссылку нужно будет использовать в HTTP-запросе на следующем шаге.
- Вы можете проверить, все ли сделали правильно, если вставите получившуюся ссылку в строку браузера. Если вы все сделали правильно, то вы должны увидеть содержание таблицы в виде JSON-массива.
- Создайте 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. Но успешное завершение запроса вовсе не означает, что логин действительно был в таблице.
- От варианта Завершен с ошибкой сделайте связь с блоком Текст, где напишите:
Ошибка чтения логина $httpStatus
Если в процессе тестирования вы увидите это сообщение, ищите решение проблемы в конце этой статьи.
- От варианта Завершен успешно сделайте связь с блоком Условие и напишите в него:
$user
Это условие будет проверять, записалось ли что-либо в переменную $user, то есть, был ли найден введенный пользователем логин. Если логин был найден, то в переменной будет содержание, и условие отработает. Если нет, то будет отрабатывать else.
- От else блока Условие сделайте связь с текстовым блоком с текстом:
Такого логина нет. Попробуйте еще раз.
Добавьте на этот экран кнопку «попробовать еще» и свяжите ее с экраном запроса логина:
- От блока условий сделайте связь с блоком text to $var, в котором напишите:
Введите пароль.
и переменную: passwordentry
- Свяжите «Переход после ввода $passwordentry» с новым блоком Условия, на котором будем сравнивать введенный пароль с содержанием ячейки, которая соответствует введенному логину и находится в колонке password:
$user.password === $passwordentry
В этом условии мы используем оператор сравнения языка Javascript ===, который проверяет, идентичны ли значения данных переменных, а также, имеют ли они одинаковый тип данных.
- От этого условия сделайте связь с текстовым блоком, в котором будет текст об успешном прохождении авторизации.
Также можем еще раз вывести значения логина и пароля.
Добро пожаловать! Ваш логин: $user.login Ваш пароль: $user.password
От else сделайте связь с текстовым блоком с текстом: Пароль неверный.
Добавьте на него кнопку «попробовать еще» и свяжите ее с экраном ввода пароля:
Готово!
Теперь бот может проверять, есть ли в колонке login таблицы значение логина, введенное пользователем. Затем он может проверить, соответствует ли введенный пользователем пароль ячейке password, находящейся рядом с введенным логином.
Ознакомьтесь с другими уроками по использованию Google Таблиц: