【发布时间】:2014-01-25 13:45:53
【问题描述】:
我正在运行 Express 和 NodeJS 作为 Angular 前端的后端。我正在使用 RedisStore 进行会话。使用this blog article,我能够想出以下代码:
app.use express.cookieParser(config.session.signed)
app.use express.session( {
secret: config.session.secret,
cookie: config.session.cookie,
store: new RedisStore({
client: client
})
} )
app.use express.csrf()
app.use (req, res, next) ->
res.cookie('XSRF-TOKEN', req.session._csrf)
next()
app.use passport.initialize()
app.use passport.session({})
一切正常运行,直到 redis 会话到期(我在我的配置中设置了两个小时)。会话过期后,我收到禁止错误:
Error: Forbidden
at Object.exports.error (/code/node_modules/express/node_modules/connect/lib/utils.js:62:13)
...
问题是我不知道如何捕获这个错误并重置 RedisSession(和 CSRF 令牌),结果,单页 angular 前端似乎死了,需要刷新页面才能抓取一个新的会话和恢复的东西。
还有其他人遇到过这个问题吗?提前致谢
【问题讨论】:
-
你发现了吗?也遇到这种情况...
-
好吧,从来没有得到关于如何正确捕获 Node 中的错误的答案,但与此同时,我在我的 Angular 前端中捕获了错误并调用
$route.reload()来更新页面并抓取一个新的饼干。这只是不太理想,因为在登录事件的情况下,我必须捕获错误,重新加载路由,然后重新发送请求以保持用户体验无缝。但它确实有效。
标签: node.js angularjs session express redis