Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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
Javascript 如何在页面刷新时发送OAuth2访问令牌?_Javascript_Oauth 2.0 - Fatal编程技术网

Javascript 如何在页面刷新时发送OAuth2访问令牌?

Javascript 如何在页面刷新时发送OAuth2访问令牌?,javascript,oauth-2.0,Javascript,Oauth 2.0,我有一个web应用程序,它将使用OAuth2处理身份验证。经过身份验证后,web应用程序拥有令牌并可以访问资源。但是,如果用户刷新页面或关闭浏览器并稍后返回,则令牌将丢失,用户必须再次登录。这在用户体验方面是非常糟糕的 此外,服务器端代码检查用户是否登录,并仅在用户登录时发送应用程序主页。若他并没有,那个么它将重定向到登录页面 由于OAuth2令牌作为头发送到服务器,所以当用户在地址栏中键入站点名称时,浏览器不会发送任何令牌 我计划在cookies中发送访问令牌。这是一个合适的解决方案吗?您可能

我有一个web应用程序,它将使用OAuth2处理身份验证。经过身份验证后,web应用程序拥有令牌并可以访问资源。但是,如果用户刷新页面或关闭浏览器并稍后返回,则令牌将丢失,用户必须再次登录。这在用户体验方面是非常糟糕的

此外,服务器端代码检查用户是否登录,并仅在用户登录时发送应用程序主页。若他并没有,那个么它将重定向到登录页面

由于OAuth2令牌作为头发送到服务器,所以当用户在地址栏中键入站点名称时,浏览器不会发送任何令牌


我计划在cookies中发送访问令牌。这是一个合适的解决方案吗?

您可能希望将访问令牌设置为发送到Windows.ready()或ComponentDidMount()生命周期挂钩上的tour API或服务器的每个HTTP请求的默认标头(如果您使用React)

然后,您可以开始使用首选库(如axios)提取数据,或者在应用程序准备就绪时提取数据

为此,您只需第一次将访问令牌保存在本地存储中,然后在window.ready()上检索它。 您将在应用程序的容器组件或index.html文件中的脚本标记中执行此操作

但是,此解决方案将无法对安全路由执行服务器端水合,特别是当数据来自独立API时。 在使用这种解决方案时,解决服务器端水合问题的唯一方法是将用户访问令牌设置为url中的查询字符串参数,这样即使不执行javascript,浏览器也可以将其传递给服务器;但与此相关的安全缺陷显而易见


希望这有帮助,干杯。

当用户在浏览器的地址栏中键入网站名称时,情况会怎样?在这种情况下如何发送访问令牌?我们在这里讨论的是安全路由。也就是说,将有公共路由,向用户提供公共可用的数据,不需要获取访问令牌,也有私有路由。如果您的主页需要为用户获取受限数据,我的建议是您放弃这些路由的服务器端数据获取,然后通过AJAX请求继续进行客户端数据获取。在这种情况下,将从本地存储检索令牌,并将其作为http请求中的标头发送。我需要在主页上显示访问令牌,以便用户在会话继续时可以直接进入应用程序。您建议我可以将令牌保存到本地存储中,因此没有理由不保存在cookies中。谢谢,我建议你在做决定之前先阅读这篇文章:如果这解决了你的问题,你能接受答案吗?谢谢