Chrome扩展程序/网络应用会话控制

时间:2011-08-09 04:01:43

标签: javascript html google-chrome google-chrome-extension

我正在创建Chrome扩展程序,而不是chrome webapp。这个应用程序只包含html,js,image和css文件。应用程序连接到服务器以获取数据。我选择这样做,因为它会减少用户下载的文件数量。使用Backbone.js我的应用程序中有一个MVC架构。因此应用程序只发送json。

现在说了这个,我需要一个会话管理。我计划使用Google身份验证,因为该组织拥有Google Apps。我需要一种方法,一旦用户使用google auth登录,服务器就会在每次应用程序发出请求时获取用户名。

如果可能,最好在请求标头中添加用户名。或者我应该使用cookies?在这种情况下,任何人都可以告诉我如何使用cookies吗?

2 个答案:

答案 0 :(得分:3)

这可能是一个迟到的回复,但我想为您提供更优雅的解决方案,因为用户已在其浏览器中启用了Cookie。 首先在另一个问题上阅读我的answer

既然您可以从内容脚本发送交叉来源xhr,您只需将所有身份验证和会话管理存储在仅限服务器。这是对的,你只需要显示用户是否登录,并根据服务器响应显示客户端的注销按钮。

请按照以下步骤操作。

  1. 在客户端每当用户访问您的Chrome网络应用时,盲目地向服务器发出XmlHttpRequests而不必担心身份验证,只需在服务器响应中保留一个标签,我将在下面介绍。

  2. 在服务器,只要您收到请求,请检查有效会话或会话Cookie。如果会话有效,则发送正确的响应,如果没有发送错误,401或任何其他响应,以便与您的客户端通信该会话无效。如果您发送错误代码(例如401)会更好,因为您可以在客户端放置通用脚本以通知他们他们没有登录。

  3. 在客户端如果来自服务器的响应正确,请显示它,否则显示您网站的登录链接。

  4. 重要 :如果用户已登录,则显示退出按钮。

  5. 查看我对此in my extension

    的实施情况

答案 1 :(得分:1)

要获得在您的应用中使用Google身份验证的帮助,请查看Google OAuth tutorial随附的所有内容(我没有时间使用此功能进行设置)。

至于会话管理。 Google使用的OAuth的实施将令牌存储在localStorage中。另外,正如extensions overview中简要提到的那样,我们应该使用localStorage来存储数据。因此,我建议您在此处存储用户名,因为它可以在整个应用程序的生命周期内访问(直到它被卸载)。但是,您可能需要管理此处存储的名称,并考虑用户登录和注销时应执行的操作。那说;我不确定sessionStorage是否会更好,因为我之前从未使用过它,更不用说扩展了。

注意

localStorage及其对应项只存储字符串,因此我建议使用包含JSONparsestringify的包装器来分别获取和设置值。