Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script UiApp:非gmail用户的持久登录_Google Apps Script - Fatal编程技术网

Google apps script UiApp:非gmail用户的持久登录

Google apps script UiApp:非gmail用户的持久登录,google-apps-script,Google Apps Script,我正在尝试实现一个谷歌应用脚本web服务,它要求用户使用我们系统上设置的帐户登录 用户不一定拥有gmail帐户,也不需要创建gmail帐户 web服务必须以脚本所有者的身份运行,因为它必须能够写入电子表格和其他没有共享写入权限的资源 我已经设法实现了登录屏幕,具有相当强的安全性——但我现在遇到的问题是,用户每次访问时都必须重新登录,即使他们点击了刷新按钮 关于如何实现这一点有什么想法吗? 是否有办法在用户浏览器中存储包含会话id的cookie? 还是有其他方法可以奏效 提前谢谢 Josh由于应用

我正在尝试实现一个谷歌应用脚本web服务,它要求用户使用我们系统上设置的帐户登录

用户不一定拥有gmail帐户,也不需要创建gmail帐户

web服务必须以脚本所有者的身份运行,因为它必须能够写入电子表格和其他没有共享写入权限的资源

我已经设法实现了登录屏幕,具有相当强的安全性——但我现在遇到的问题是,用户每次访问时都必须重新登录,即使他们点击了刷新按钮

关于如何实现这一点有什么想法吗? 是否有办法在用户浏览器中存储包含会话id的cookie? 还是有其他方法可以奏效

提前谢谢


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,或者添加您的评论。