2016-12-30 2 views
1

Я использую скрипт Google App Script и Google Spreadsheet onOpen(). Я блокирую вход пользователя в Google Spreadsheet.Session.getActiveUser() не работает для пользователей с перекрестными доменами

Ограничение на то же самое, что он не регистрирует идентификатор электронной почты на кросс-домене, который я нашел на форумах.

Вот код для того же:

function onOpen(e) 
{ 
    try 
    { 
    var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Action') 
    .addItem('Add Data', 'addData') 
    .addToUi() 

    var sheet =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Login Details"); 
    sheet.appendRow([Session.getActiveUser().getEmail(),new Date()]); 

    } 
    catch(e) 
    { 
    Logger.log(e); 
    } 
} 

одно наблюдение из OnOpen() функциональность:

1] Я владелец таблицы и регистрирует только идентификаторы электронной почты нашего домена компании , (Автоматически onOpen() электронной таблицы)

2] Из другого домена, когда я открываю ограниченный скрипт электронной таблицы и запускает onOpen(), он регистрирует зарегистрированного пользователя.

Что является причиной того же и существует ли какое-либо обходное решение для пользователя в перекрестном домене?

+0

Что вы имеете в виду под «не электронный идентификатор входа на поперечному домена, который я нашел на форумах», каких форумах? А также во втором наблюдении вы говорите, что он регистрируется в журнале, то в чем проблема? это протоколирование или отсутствие регистрации идентификатора электронной почты ?. Да, он будет регистрироваться только пользователем. Если вы хотите получить пользователя, который дал авторизацию скрипту, используйте getEffectiveUser(). Пожалуйста, объясните выше пункты, которые я упомянул. –

+0

@ShyamKansagra: On StackOverflow & [link] (https://developers.google.com/apps-script/reference/base/session#getActiveUser()). Допустим, мой домен - это abc.com, а домен клиентов - xyz.com, а затем функция abc.com работает нормально. Значит, когда я вошел в систему с [email protected], он регистрирует имя пользователя в листе «Сведения о пользователе». Но если я вошел в систему с помощью [email protected], я получаю пустое имя пользователя. В соответствии со вторым наблюдением, когда я вошел в систему с помощью [email protected] и открыл редактор сценариев и запустил onOpen, он регистрирует идентификатор электронной почты как [email protected], но при прямом открытии электронной таблицы этого не будет. –

+0

Может быть, потому, что вы, должно быть, забыли установить триггер на [email protected] .... пожалуйста, проверьте, что если вы установили триггер для onOpen() в своем домене, то аналогичным образом вы также должны установить триггер на идентификаторе клиента, триггеры не копируются с кодом. –

ответ

0

Я думаю, что Session.getActiveUser().getEmail() имеет проблемы с onOpen триггером на внешний домен, если этот человек не является владельцем.

Кроме того, автоматические триггеры в минуту также не могут регистрировать активного пользователя.

Вот обходной путь:

меню Add в самой таблице, с опционом, который при нажатии будет запускать функцию, чтобы добавить строку, которую вы хотите. Как, Session.getActiveUser().getEmail() работает, когда мы запускаем функцию вручную из сценария.

Используйте этот код:

function addMenu() 
{ 
    var ui = SpreadsheetApp.getUi(); 

    ui.createMenu('Log user') 
     .addItem('Run script', 'appendRow') 
    .addToUi() 
} 

А также добавить эту функцию:

function appendRow() 
{ 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("YOUR_SHEET").appendRow([Session.getActiveUser().getEmail(),new Date()]); 
} 

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

Кроме того, не забудьте установить onOpen trigger для addMenu() функция на стороне клиента или даже на вашей стороне.

Для получения более подробной информации, мы можем прочитать: Class session

+0

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

Смежные вопросы