我需要在用户登录后通过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
});
...
答案 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是支持的客户端功能
答案 2 :(得分:0)
在客户端调用/ login时使用xmlhttpresponse对象,然后为'load'添加一个事件监听器。这将为客户端提供已添加令牌的responseObject。然后在事件监听器中放入localStorage代码