2015-09-12 38 views
0

我正在開發一個Google Docs插件,並且需要知道當前使用該插件的用戶是否已經在當前文檔或任何文檔中使用過它。我無法弄清楚哪個服務給了我當前用戶的某種唯一標識符,我可以用它來標識當前用戶。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。如果Google應用程序域安全策略不允許共享電子郵件,則不會將Session.getEffectiveUser()。getEmail()返回空白 - 如果其非Google Apps帳戶(即gmail帳戶)確實會返回空白? –

+0

我不明白安全策略的意義。用戶驗證腳本訪問他的帳戶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

好點 - 我會檢查卸載會影響屬性的情況。 –