我的Google脚本/HTMLService应用程序有90%可供匿名用户使用,但是用户必须使用G-Suite帐户才能访问剩下的10%。
想要的行为是,如果用户已经登录到G-Suite (例如,从浏览器中读取Gmail ),web应用程序就可以识别用户,而无需提示再次登录--就像在阅读Gmail之后就使用了Google一样。如果用户还没有登录,则需要提示他在访问受限功能时使用@my_g-suite.com帐户登录。
我的第一次尝试是两种应用程序方法:一种是“任何人都可以使用,包括匿名者”,另一种是“My _g-Suite.com成员可以使用”。这种方法的问题是,第二个应用程序只显示登录屏幕,如果浏览器没有谷歌身份。如果用户登录到常规的非g套件gmail,则会显示奇怪的google驱动程序错误,而不是登录提示。我很久以前就这么说过了,没有解决办法。
因此,我使用本指南实现了一个登录按钮。我看到的行为不是我所期望的:
Session.getActiveUser()将返回正确的用户ID,但是客户端的googleUser.getBasicProfile().getEmail()没有任何内容。googleUser.getBasicProfile().getEmail()将返回正确的用户ID ),服务器端的Session.getActiveUser()则不会返回任何内容。Session.getActiveUser()表示它是UserOne@my_g-suite.com,而googleUser.getBasicProfile().getEmail()则表示它是UserTwo@my_g-suite.com。两个相互冲突的身份同时存在。我如何使登录到我的应用程序与其他G-Suite服务无缝,而不是拥有完全独立的,只有应用程序的第二个身份和2)限制在@ my _g-suite.com。
按照@TheMaster的建议,我尝试了以下方法:
Session.getActiveUser()是否是G套件用户的检查。如果没有,我会按预期的方式在新选项卡中打开登录屏幕的window.open("https://login.my_g-suite.com")。- If browser hasn't been used for non-G-Suite account (like regular Gmail) - all works great. `Session.getActiveUser()` shows newly logged in user ID
- BUT if that browser has been logged in to non-G-Suite account, `Session.getActiveUser()` has no idea about the fact that I just logged in G-Suite in another tab (even after reloading web app). Which is back to square one.
与谷歌自己的应用程序相比,这种行为并没有什么不同:例如,如果你阅读常规的非g套件gmail,然后使用G-Suite帐户登录到Google驱动器,然后重新加载gmail -它不会仅仅因为你在该浏览器上登录到G-Suite Gmail而自动将您带到G-Suite Gmail。您需要通过调用active- account选择菜单(右上角的圆形化身图标)显式地告诉Gmail您想使用G-Suite帐户。
看起来,无论我采取什么方法,我都遇到了同样的问题:需要告诉独立的谷歌应用程序脚本,哪个是Google的最新身份。我看不出有什么办法。
由于谷歌最近的变化,我上面所说的不再是真实的。(2)现在导致错误404而不是登录屏幕。
几天前只影响到独立谷歌应用程序的登录问题现在正在困扰着整个G-Suite。我们的志愿者第一响应组织获得了got,主要用于安全的intranet站点(members.my_g-suite.com),在那里我们共享内部协议和文档。它是建立在新的谷歌网站和谷歌团队驱动器。在周三之前,尝试访问成员. to _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-套房。
发布于 2019-02-22 13:47:24
这是因为你的网络应用程序运行在一个iframe里面。您可以通过手动拒绝访问web应用程序来强制登录。
onload,检查Session.getActiveUser().getEmail()服务器端,看看它是否与您的域匹配,- If it does, proceed to load your actual web-app
- If not, just provide the information that the user needs to login to your gsuite to access.
您还可以
setInterval检查其他window.close属性。关闭时,重新加载您的web应用程序。https://stackoverflow.com/questions/54817537
复制相似问题