如何在Polymer SPA中保留后端会话信息

时间:2015-04-01 08:47:28

标签: polymer

我想登录使用Laravel5编写的RESTful后端服务器,单页前端应用程序利用Polymer的自定义元素。

在此系统中,持久性(CRUD)层存在于服务器中。因此,应该在服务器上进行身份验证以响应客户端的api请求。当请求有效时,服务器返回JSON格式的User对象,包括用户在客户端的访问控制角色。

在这里,我的问题是如何保持会话,即使用户刷新前端页面也是如此?谢谢。

2 个答案:

答案 0 :(得分:1)

这是Polymer之外的问题,甚至只是单页应用。问题是如何在浏览器中保留会话信息。使用SPA更简单,因为您可以在内存中保留身份验证令牌,但传统的Web应用程序从一开始就遇到了这个问题。

您需要做两件事:

  1. 令牌:您需要一个用户令牌,表明此用户已通过身份验证。你希望它是一个无法猜到的东西,否则有人可以欺骗它。所以令牌更好的不是" jimsmith"但更可靠的东西。你有两个选择。您可以拥有服务器存储的随机生成的令牌,以便在将来的请求中显示时,它可以验证令牌。这就是大多数会话管理器在诸如nodejs会话或Jetty会话等应用服务器中工作的方式。另一种方法是执行加密操作,以便服务器只需要以数学方式验证,而不是检查存储以查看令牌是否有效。我为http://github.com/deitch/cansecurity中的节点做了这个,但它有各种选项。
  2. 存储:您需要一些方法来存储不依赖于JS内存的令牌客户端,因为您希望重新加载页面。
  3. 有几种方法可以进行客户端存储。到目前为止最常见的是cookie。由于浏览器存储它们而不是你太努力,并且只要你访问cookie注册的域就会显示它们,这很容易做到。许多客户端和服务器端auth库都是围绕它们构建的。

    另一种方法是html5本地存储。根据您的目标浏览器和支持,您可以考虑使用它。

    还有一些方法可以使用URL参数,但是当有人切换页面时你会冒失去它的风险。它可以工作,但我倾向于避免这种情况。

    我没有看到任何直接处理cookie的组件,但它不应该太难建立。

    以下是我用于最近的应用程序的cookie管理代码的要点。随意包装它以构建用于cookie管理的Web组件..只要您共享相同的内容!

    https://gist.github.com/deitch/dea1a3a752d54dc0d00a

    更新:

    component.kitchen在这里有一个存储组件http://component.kitchen/components/TylerGarlick/core-resource-storage

答案 1 :(得分:0)

如果使用PHP,最简单的方法是将用户保持在PHP会话中(就像普通的非SPA应用程序一样)。 PHP将在服务器上存储用户信息,并自动生成浏览器将随任何请求发送的cookie。对于没有负载平衡的单个服务器,会话数据是本地的,非常快。