使用nodejs保存到本地存储中

时间:2016-05-12 09:21:39

标签: javascript node.js express local-storage

我需要在用户登录后通过nodejs将jwt-token保存在本地存储中(已获得授权)。

检查控制器中的用户/密码是否正确后,我将生成的令牌保存在本地存储中。目前我无法引用窗口,因为它不存在。

ReferenceError: window is not defined 

我正在尝试这样做。

...
      payload = {
        sub: user.email,
        role: user.role
      };

      token = jwt.sign(payload, jwtSecretKey, {expiresIn: '60m'});

      window.localStorage.setItem('token', token);

      res.status(200).render('index' , {
        user: user,
        token: token
      });
...

3 个答案:

答案 0 :(得分:7)

您无法在Node.js上保存到localStorage,但您可以在浏览器上执行此操作,可能是在从服务器发送之后,从Node.js上的服务器执行此操作。

您应该将令牌从服务器(在Node.js上运行)发送到客户端(浏览器),该客户端具有window对象,具有localStorage和相关getItem和{ {1}}方法,您可以从您的JavaScript代码中引用客户端(浏览器)。 Node.js没有任何setItem可供参考。因此,通过在Node.js代码中引用它,您将遇到window错误。

只需将其放入cookie并发送,或通过json响应发送。然后在客户端浏览器上将其保存到undefined

以下是后一种方式的示例代码;通过回复发送:

window.localStorage
// SERVER-SIDE Code
// say `app` is your app server on node.js
// this is a url handler on your server-side code
// you just have sent your user credentials from a browser
// typically via a form in the body of your http request
app.post('/auth', function (req, res) {
  // you may have here some jwt token creation things
  // ...
  // and send it as your response to the client (probably a web browser) ..
  // with your prefrred name as the key, say 'my_token', ..
  // where you will save it to localStorage (ie. window.localStorage)
  res.json({my_token: 'asdfgh-anything-jw-token-qwerty'})
})

答案 1 :(得分:1)

如果你的意思是html 5 localStorage,那就没有这样的事情,因为node.js是一种服务器端技术。 Html 5 localStorage是支持的客户端功能

参考How to access localStorage in node.js?

答案 2 :(得分:0)

在客户端调用/ login时使用xmlhttpresponse对象,然后为'load'添加一个事件监听器。这将为客户端提供已添加令牌的responseObject。然后在事件监听器中放入localStorage代码