2015-09-12 4 views
0

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

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

Мысли о лучшем способе сделать это?

ответ

1

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

Единственное, что вы можете сделать в ситуации, это использовать что-то вроде DocumentApp.getActiveDocument().getId() и проверить, был ли сценарий использован в этом документе, но, конечно же, это не даст вам идеи, если пользователь использовал ваш скрипт в других документах или не.

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

+0

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

+0

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

+0

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

0

Уникальный идентификатор пользователя вы можете получить для приложений сценария Session.getEffectiveUser(). GetEmail()

Это вернет письмо от пользователя, для которого запускаемого скрипта. Это лучше, чем ActiveUser, потому что если вы используете триггер, EffectiveUser вернет электронное письмо пользователя, который установит скрипт.

Я использую это для нескольких приложений для определения назначения лицензии, и он отлично работает.

+0

Спасибо St3ph. Не работает ли Session.getEffectiveUser(). GetEmail(), если политики безопасности домена домена google не разрешают общий доступ к электронной почте, или действительно возвращаются пустым, если это не учетная запись Google Apps (например, учетная запись gmail)? –

+0

Я не понимаю вашу политику безопасности. Пользователь Whe проверяет доступ скрипта к своей учетной записи. EffectiveUser всегда будет возвращать свою электронную почту. Я использую его во всем моем скрипте без проблем. Для учетной записи без учетной записи они могут получить доступ к скрипту только в том случае, если они запускают его, так как владелец всегда будет вашим адресом электронной почты или если он является публичным скриптом, поэтому в этом случае пользователь не будет проверять доступ к скрипту для своей учетной записи и не уверен, но всегда будет быть пустым. – St3ph

+0

St3ph, чтобы объяснить мою точку зрения - справочная документация упоминает, что getActiveUser(). GetEmail() и getEffectiveUser(). GetEmail() может не работать в ситуации, когда администратор Google Apps запретил ее с помощью политики безопасности. Это важно в моем случае, поскольку надстройка, которую я разрабатываю, по существу будет сторонним дополнением, которое не обязательно включает домен. Таким образом, есть шанс, что я получу пустое значение вместо адреса электронной почты пользователя. Таким образом, этот метод может оказаться ненадежным. –

0

Похоже, что лучшим решением будет катиться собственное решение, используя следующие параметры для идента в соответствующее время:

PropertiesService.getUserProperties().setProperty("userId",<someGeneratedUId>)

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

var userId = PropertiesServices.getUserProperties().getProperty("userId")

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

Я проверю это дальше, но похоже, что это работает в моих тестах.

+0

Не уверен, но если пользователь удалит скрипт, свойства будут удалены. Быть проверенным. Лично я использую EffectiveUser и библиотеку вызовов, чтобы проверить, имеет ли пользователь доступ к проверке. Кроме того, что касается удаления, это может сделать работу. – St3ph

+0

Хорошая точка - я проверю случай, когда удаление влияет на свойства. –

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