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

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

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

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

Не используйте в качестве логина или пароля набор цифр.

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

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

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

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

password

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



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

Добавьте в сценарий блок Ввод текста.



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

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

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



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



Подготовим таблицу.

Опубликуйте таблицу:

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

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




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

Откройте блокнот и скопируйте туда ссылку:

http://tools.aimylogic.com/api/googlesheet2json?&id=

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



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

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



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

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



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

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




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

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

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



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

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



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

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



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


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

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





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



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

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


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

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



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

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



Готово!

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

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

Онлайн-заказы
Как сохранять информацию о пользователе
Бронирование
Как посмотреть статистику самого популярного запроса от пользователя
Авторизация в Telegram
Была ли эта статья полезна?
отменить
Спасибо!