繁体   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