簡體   English   中英

使用G-Suite帳戶登錄自定義Web應用

[英]Signing into custom web app with G-Suite account

我的Google Apps Script / HTMLService網絡應用程序的90%可用於匿名用戶,但是該用戶必須使用G-Suite帳戶登錄才能訪問其余的10%。

所需的行為是,如果用戶已經登錄到G-Suite(例如,從該瀏覽器中讀取Gmail),則該Web應用程序會識別該用戶,而不會提示您再次登錄-就像您在閱讀Gmail之后便進入了Google日歷一樣。 如果用戶尚未登錄-訪問受限功能時,需要提示他使用@ my_g-suite.com帳戶登錄。

我的第一個嘗試是兩種應用程序方法:一種發布為“對所有人(包括匿名用戶)可用”,另一種“對my_g-suite.com成員可用”。 這種方法的問題在於,如果瀏覽器沒有Google身份,第二個應用程序只會顯示登錄屏幕。 如果用戶登錄到常規的非g套件gmail,則會顯示奇怪的google驅動程序錯誤,而不是登錄提示。 我前不久發布了關於此問題的解決方案。

因此,我改為使用本指南實現了登錄按鈕。 我看到的行為不是我所期望的:

  1. 如果在訪問應用程序之前用戶已經使用UserOne@my_g-suite.com登錄(例如查看G-Suite電子郵件帳戶),則服務器端的Session.getActiveUser()返回正確的用戶ID,但是googleUser.getBasicProfile().getEmail()客戶端上的googleUser.getBasicProfile().getEmail()沒有任何內容。
  2. 如果用戶在訪問應用程序之前未使用G-Suite ID登錄,然后使用Web應用程序上的“登錄”按鈕登錄,則googleUser.getBasicProfile().getEmail()返回正確的用戶ID,但是, Session.getActiveUser()在服務器端不返回任何內容。
  3. 如果用戶使用UserTwo@my_g-suite.com將該按鈕登錄 ,則其他G-Suite應用程序均無法識別該按鈕。 因此,如果用戶隨后登錄UserOne@my_g-suite.com並返回到該應用,則Session.getActiveUser()表示它為UserOne@my_g-suite.com,googleUser.getBasicProfile().getEmail()表示它為UserTwo @ my_g -suite.com 兩個沖突的身份同時出現。

如何使我的應用程序登錄成為1)與其他G-Suite服務無縫連接,而不是完全獨立的僅用於應用程序的第二身份和2)限制為@ my_g-suite.com


遵循@TheMaster建議,我嘗試了此操作:

  1. 創建了一個Google協作平台網站“ login.my_g-suite.com”,該網站僅對g-suite用戶可用,並且只有一個頁面顯示“您已登錄g-suite”

  2. 在運行為“我”並且“所有人都可以使用,甚至匿名”的Web應用程序中,我實現了對Session.getActiveUser()是否為g-suite用戶的檢查。 如果沒有,我執行window.open("https://login.my_g-suite.com") ,這將按預期在新選項卡中打開登錄屏幕。

  3. 用戶登錄后,我會重新加載Web應用程序。 這是可悲的部分:

    • 如果未將瀏覽器用於非G-Suite帳戶(如常規Gmail),則一切正常。 Session.getActiveUser()顯示新登錄的用戶ID
    • 但是,如果該瀏覽器已登錄到非G-Suite帳戶, Session.getActiveUser()不會知道我剛剛在另一個選項卡中登錄了G-Suite(即使在重新加載Web應用程序之后)。 回到正題。

將此與Google自己的應用進行比較,此行為沒有太大不同:例如,如果您閱讀常規的非g-suite gmail,然后使用G-Suite帳戶登錄到Google雲端硬盤,然后重新加載gmail-不需要您會因為登錄到該瀏覽器上的G-Suite帳戶而自動進入G-Suite Gmail。 您需要通過調用活動帳戶選擇菜單(右上角的圓形頭像圖標)明確告知Gmail您要使用G-Suite帳戶。

看起來,無論采用哪種方法,我都碰到了牆:需要告訴獨立的Google App腳本哪個Google身份是最新的。 而且我看不到這樣做的任何方法。


由於Google最近做出的更改,我上面所說的不再正確。 (2)現在導致錯誤404,而不是登錄屏幕。

幾天前僅影響獨立Google App Script應用程序的登錄問題現在困擾着整個G-Suite。 我們的志願者急救組織主要在安全的Intranet網站(members.my_g-suite.com)上獲得G-Suite,我們在該網站上共享內部協議和文檔。 它基於新的Google協作平台和Google Team Drive構建。 在星期三之前,嘗試訪問members.my_g-suite.com,以轉到G-Suite登錄屏幕。 現在將它們帶到"404. That's an error. The requested URL / was not found on this server. That's all we know." 唯一的解決方法是強制每次訪問G-Suite之前,用戶都退出個人Gmail,對於使用個人設備的志願者來說,這不是合理的要求。 我們感覺就像Google從我們腳下拉下了地毯。 唯一的希望是這是暫時的更改,他們會將其恢復為本周初的狀態。 我們還確認,此更改不僅限於我們的G-Suite。

這是因為您的網絡應用程序在iframe中運行。 您可以通過手動拒絕訪問Web應用程序來強制登錄。

  • onload ,檢查Session.getActiveUser().getEmail()服務器端,看它是否與您的域匹配,

    • 如果是這樣,請繼續加載您的實際網絡應用
    • 如果沒有,只需提供用戶登錄您的gsuite所需的信息即可訪問。

你也可以

  • 在另一個標簽中繼續打開https://admin.google.com (或您的域專用的任何網址)
  • 查看它是否已打開,並使用setInterval檢查另一個window.close屬性。 關閉后,重新加載您的網絡應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM