Google apps script UiApp:非gmail用户的持久登录
我正在尝试实现一个谷歌应用脚本web服务,它要求用户使用我们系统上设置的帐户登录 用户不一定拥有gmail帐户,也不需要创建gmail帐户 web服务必须以脚本所有者的身份运行,因为它必须能够写入电子表格和其他没有共享写入权限的资源 我已经设法实现了登录屏幕,具有相当强的安全性——但我现在遇到的问题是,用户每次访问时都必须重新登录,即使他们点击了刷新按钮 关于如何实现这一点有什么想法吗? 是否有办法在用户浏览器中存储包含会话id的cookie? 还是有其他方法可以奏效 提前谢谢Google apps script UiApp:非gmail用户的持久登录,google-apps-script,Google Apps Script,我正在尝试实现一个谷歌应用脚本web服务,它要求用户使用我们系统上设置的帐户登录 用户不一定拥有gmail帐户,也不需要创建gmail帐户 web服务必须以脚本所有者的身份运行,因为它必须能够写入电子表格和其他没有共享写入权限的资源 我已经设法实现了登录屏幕,具有相当强的安全性——但我现在遇到的问题是,用户每次访问时都必须重新登录,即使他们点击了刷新按钮 关于如何实现这一点有什么想法吗? 是否有办法在用户浏览器中存储包含会话id的cookie? 还是有其他方法可以奏效 提前谢谢 Josh由于应用
Josh由于应用程序脚本无法与浏览器对象(如cookies等)交互,因此无法使用应用程序脚本进行持久登录。应用程序脚本仅适用于谷歌帐户。由于应用程序脚本无法与浏览器对象(如cookies等)交互,因此无法使用应用程序脚本进行持久登录。应用程序脚本旨在只使用谷歌账户。这是一篇非常古老的文章,但由于有一个解决方案,我认为最好展示它来帮助有类似需求的人 嗨,乔希 我已经开发了这样一个系统,而且确实有办法做到这一点 您确实可以开发一个使用PrivateCache类的类似cookie的系统:CacheService.getPrivateCache() 如果用户重新加载或关闭该页面,则该选项有效 但是,使用此解决方案,当您关闭浏览器时,将无法再检索信息 以下是我用来防止您强调的问题的函数 请随意调整它们
function getCookie(){
var cache=CacheService.getPrivateCache();
var cached=cache.get("UserCookie");
if(cached!=null){
return Utilities.jsonParse(cached);
}
return -1;
}
function createCookie(data){
var cache=CacheService.getPrivateCache();
cache.put("UserCookie",Utilities.jsonStringify(data),1800);
}
function removeCookie(){
var cache=CacheService.getPrivateCache();
cache.remove("UserCookie");
}
另一种方法是使用UserProperties。在这种情况下,它将工作,即使你关闭浏览器。。。我刚试过
因此,要使用的功能是:
function getCookie(){
var cached=UserProperties.getProperty('UserCookie');
if(cached!=null){
return Utilities.jsonParse(cached);
}
return -1;
}
function createCookie(data){
UserProperties.setProperty('UserCookie',Utilities.jsonStringify(data));
}
function removeCookie(){
UserProperties.deleteProperty("UserCookie");
}
我希望它能帮助任何人
干杯
Nicolas这是一篇非常古老的帖子,但由于有一个解决方案,我认为最好展示它来帮助有类似需求的人 嗨,乔希 我已经开发了这样一个系统,而且确实有办法做到这一点 您确实可以开发一个使用PrivateCache类的类似cookie的系统:CacheService.getPrivateCache() 如果用户重新加载或关闭该页面,则该选项有效 但是,使用此解决方案,当您关闭浏览器时,将无法再检索信息 以下是我用来防止您强调的问题的函数 请随意调整它们
function getCookie(){
var cache=CacheService.getPrivateCache();
var cached=cache.get("UserCookie");
if(cached!=null){
return Utilities.jsonParse(cached);
}
return -1;
}
function createCookie(data){
var cache=CacheService.getPrivateCache();
cache.put("UserCookie",Utilities.jsonStringify(data),1800);
}
function removeCookie(){
var cache=CacheService.getPrivateCache();
cache.remove("UserCookie");
}
另一种方法是使用UserProperties。在这种情况下,它将工作,即使你关闭浏览器。。。我刚试过
因此,要使用的功能是:
function getCookie(){
var cached=UserProperties.getProperty('UserCookie');
if(cached!=null){
return Utilities.jsonParse(cached);
}
return -1;
}
function createCookie(data){
UserProperties.setProperty('UserCookie',Utilities.jsonStringify(data));
}
function removeCookie(){
UserProperties.deleteProperty("UserCookie");
}
我希望它能帮助任何人
干杯
Nicolas希望您知道,您正在存储所有浏览器会话中所有用户共有的信息?因此,如果一个用户登录,调用webapp的任何其他用户都将被视为登录良好,如果我使用了PublicCache和ScriptProperties,您的声明将是正确的。。。事实并非如此。你自己试试,就像我在发布这篇文章之前做的那样……因为webapp必须以“脚本所有者”的身份运行才能绕过谷歌登录,GAS视图中只有一个用户。因此,所有内容都存储在相同的UserProperties和PrivateCache中。@Taras我已经完全理解了应用程序必须“作为脚本所有者”运行这一事实,即使在我使用此解决方案的应用程序中也是如此。我的脚本包含在一个web应用程序中,我允许“任何人,甚至匿名”访问它。今天我又做了一个测试,两个不同的用户试图用两个不同的浏览器访问它。为两个用户显示了正确的信息,日志记录过程也运行良好。另外一个试图访问应用程序的用户不被认为已经登录,所以我认为这个解决方案是有效的。你不相信。。。试试看!希望您知道,您正在存储所有浏览器会话中所有用户共有的信息?因此,如果一个用户登录,调用webapp的任何其他用户都将被视为登录良好,如果我使用了PublicCache和ScriptProperties,您的声明将是正确的。。。事实并非如此。你自己试试,就像我在发布这篇文章之前做的那样……因为webapp必须以“脚本所有者”的身份运行才能绕过谷歌登录,GAS视图中只有一个用户。因此,所有内容都存储在相同的UserProperties和PrivateCache中。@Taras我已经完全理解了应用程序必须“作为脚本所有者”运行这一事实,即使在我使用此解决方案的应用程序中也是如此。我的脚本包含在一个web应用程序中,我允许“任何人,甚至匿名”访问它。今天我又做了一个测试,两个不同的用户试图用两个不同的浏览器访问它。为两个用户显示了正确的信息,日志记录过程也运行良好。另外一个试图访问应用程序的用户不被认为已经登录,所以我认为这个解决方案是有效的。你不相信。。。试试看!如果您认为这很重要,在发布星号中打开这个持久会话ID或添加注释的请求。如果您认为这一点重要,请在发行星上打开这个持久会话ID,或者添加您的评论。