首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用G-Suite帐户登录自定义web应用程序

使用G-Suite帐户登录自定义web应用程序
EN

Stack Overflow用户
提问于 2019-02-21 22:56:40
回答 1查看 1.1K关注 0票数 1

我的Google脚本/HTMLService应用程序有90%可供匿名用户使用,但是用户必须使用G-Suite帐户才能访问剩下的10%。

想要的行为是,如果用户已经登录到G-Suite (例如,从浏览器中读取Gmail ),web应用程序就可以识别用户,而无需提示再次登录--就像在阅读Gmail之后就使用了Google一样。如果用户还没有登录,则需要提示他在访问受限功能时使用@my_g-suite.com帐户登录。

我的第一次尝试是两种应用程序方法:一种是“任何人都可以使用,包括匿名者”,另一种是“My _g-Suite.com成员可以使用”。这种方法的问题是,第二个应用程序只显示登录屏幕,如果浏览器没有谷歌身份。如果用户登录到常规的非g套件gmail,则会显示奇怪的google驱动程序错误,而不是登录提示。我很久以前就这么说过了,没有解决办法。

因此,我使用本指南实现了一个登录按钮。我看到的行为不是我所期望的:

  1. 如果用户在访问应用程序(例如查看G-Suite电子邮件帐户)之前已经与UserOne@my_g-suite.com登录,服务器端的Session.getActiveUser()将返回正确的用户ID,但是客户端的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。两个相互冲突的身份同时存在。

我如何使登录到我的应用程序与其他G-Suite服务无缝,而不是拥有完全独立的,只有应用程序的第二个身份和2)限制在@ my _g-suite.com。

按照@TheMaster的建议,我尝试了以下方法:

  1. 创建了一个Google网站"login.my_g-suite.com“,该网站仅供g套件用户使用,并且有一个页面,上面写着”您登录到了g套件“。
  2. 在我的网络应用程序中,它以"me“的形式运行,并且”每个人都可以使用,甚至是匿名的“,我实现了Session.getActiveUser()是否是G套件用户的检查。如果没有,我会按预期的方式在新选项卡中打开登录屏幕的window.open("https://login.my_g-suite.com")
  3. 用户登录后,我重新加载web应用程序。最可悲的是:
代码语言:javascript
复制
- 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-套房。

EN

回答 1

Stack Overflow用户

发布于 2019-02-22 13:47:24

这是因为你的网络应用程序运行在一个iframe里面。您可以通过手动拒绝访问web应用程序来强制登录。

  • onload,检查Session.getActiveUser().getEmail()服务器端,看看它是否与您的域匹配,
代码语言:javascript
复制
- 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.    

您还可以

  • 继续在另一个选项卡中打开https://admin.google.com (或任何特定于您的域的url )
  • 查看它是否是打开的,并使用setInterval检查其他window.close属性。关闭时,重新加载您的web应用程序。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54817537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档