оператор if для проверки авторизации пользователя по электронной почте - PullRequest
2 голосов
/ 27 апреля 2020

Я довольно новичок в программировании с помощью Google Apps Script.

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

Для справки: вкладка, в которой указаны адреса электронной почты пользователя, называется "создателями", а список находится в столбце A.

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

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

Вот мой код:

  var ss = SpreadsheetApp.getActiveSheet();
  var usr = Session.getActiveUser().getEmail();
  var DateTime = new Date();
  var emails = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Makers").getRange("A2:A").getValues();


for (var i=0;i<emails.length;i++) {
  if (emails[i][0] === usr){
    ss.getRange('B3').setValue(usr);
    ss.getRange('C3').setValue(DateTime).setNumberFormat('dd/MM/yyyy HH:mm:ss');
    return;
  } else {
  SpreadsheetApp.getUi().alert('You are not authorised to perform that action');
  throw new Error('You are not authorised to perform that action');
   }
 }

Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 27 апреля 2020
if (emails[i][0] === usr){ } else { throw new Error('You are not authorised')}

Здесь указание if гласит, что если сообщение электронной почты, находящееся в настоящее время в l oop emails[i][0], не является usr, выдается новая ошибка. Таким образом, будет выдано сообщение об ошибке, если первое проверенное письмо не будет usr. Поскольку у вас уже есть return для завершения функции, когда совпадение найдено, вам не требуется оператор else. Ошибка должна быть выдана за пределами l oop:

for (var i=0;i<emails.length;i++) {
  if (emails[i][0] === usr){
    /*stuff*/
    return;
  }
 }//end for -loop
/*function not yet `return`ed. No email is matched. Time to Throw*/
SpreadsheetApp.getUi().alert('You are not authorised to perform that action');
throw new Error('You are not authorised to perform that action');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...