Как сделать простую аутентификацию в Google Forms, используя скрипт Google Apps? - PullRequest
0 голосов
/ 27 февраля 2020

Цель и реализация

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

Пароль хранится в электронной таблице, содержащей только одну ячейку. https://prnt.sc/r8i8q1

Сценарий ниже считывает содержимое этой ячейки и создает специальный валидатор по значению первого элемента формы.

function validatePassword() {
  var passwordSpreadsheet = "[passwords_spreadsheet_id]";
  var ss = SpreadsheetApp.openById(passwordSpreadsheet);
  var passwordSheet = ss.getSheetByName("passwords");

  var form = FormApp.getActiveForm();
  var items = form.getItems();
  var item = items[0];

  if (item.getType() == 'TEXT') {
    var textItem = item.asTextItem();

    var namedRanges = passwordSheet.getNamedRanges();

    if (namedRanges.length > 0) {
      var range = namedRanges[0].getRange();
      var values = range.getValues();

      var currentPassword = values[0][0];

      var textValidation = FormApp.createTextValidation()
        .requireTextMatchesPattern(currentPassword)
        .build();
      textItem.setValidation(textValidation);
    }
  }
}

Текущий Ситуация

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

Вопросы

  1. Есть ли способ использовать этот простой механизм аутентификации в Google Forms через Google Apps Script?
  2. Есть ли способ сделать этот пароль Одноразовым паролем ?
  3. Если (1.) и (2.) недоступны, то каков наилучший способ аутентификации Google Forms?

Заранее спасибо!

1 Ответ

0 голосов
/ 28 февраля 2020

Решение

Использование скрипта приложений

Следующий фрагмент кода выполнит проверку пароля в соответствии с тем, что вы указали в Таблице в качестве пароля. В нем есть комментарии, объясняющие, что делает строка кода:

function validatePassword() {
  // Create new custom form
  var form = FormApp.create('New Form');
  var ss = SpreadsheetApp.openById('SHEETID');
  var password = ss.getSheetByName('SHEETNAME').getRange('A1').getValue();

  // Create first question to check the password, it must be required so that the user does not have access to the rest
  // of the form if failed to log in
  var item = form.addTextItem().setRequired(true);
  item.setTitle('TEST TITLE');

  // Create validation for this question matching the password that we got from the sheet
  var textValidation = FormApp.createTextValidation()
  .setHelpText('You must enter the right password')
  .requireTextMatchesPattern(password)
  .build();
  item.setValidation(textValidation);
}

Использование пользовательского интерфейса

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

  1. В первом разделе вашей формы только поместите необходимый краткий текстовый ответ.

  2. Go на три точки в нижней правой части вопроса и выберите Response Validation

  3. Затем в параметрах измените их на Regular expression, Matches и введите желаемое регулярное выражение (это может быть просто строка) и правильное сообщение об ошибке.

Вот пример этого в действии: enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...