【发布时间】:2013-03-23 01:14:56
【问题描述】:
我一直在试验 Ember.js 和 Node.js,但遇到了问题。我已经使用标准的Express.session 系统保护了服务器上的 API 路由,但是当这些 API 为 Ember.js 应用程序提供服务时我遇到了问题。由于 Ember 应用程序无法在 req.session 中存储值,因此我的应用程序无法运行。我应该如何进行身份验证,以便我仍然可以对我的 API 进行会话保护?这是我当前的一些服务器登录代码:
“检查登录”功能:
var checkLogin = function(req, res, callback) {
if (req.session.user) {
callback();
} else {
res.send({error: "AuthRequired"});
}
};
Ember 发出请求时出错:
TypeError: Cannot read property 'user' of undefined
中间件设置:
app.configure(function () {
app.use(express.bodyParser());
app.use(express.static(__dirname + '/static/'));
app.use(express.cookieParser(<SECRET>));
app.use(express.session());
//to not care about invalid JSON requests
app.use(function(err, req, res, next) {
if (err.message == 'invalid json') {
next()
} else {
next(err)
}
});
});
【问题讨论】:
-
能否发布您的 Express 应用配置(中间件等)?
-
更新了中间件信息。
-
你是不是在 你的路由之后声明你的中间件?否则,我不明白为什么
req.session可以未定义(当客户端不发送会话 cookie 时,仍然会创建req.session,只是一个空的)。 -
不。我的路线是在中间件设置之后。奇怪吧?请参阅下面的线程;我认为这是因为该应用没有为 AJAX 客户端设置会话。
-
是的,确实很奇怪。我记得发生了同样情况的一个案例,但这与一个中间件 (
i18next) 相关,该中间件 (i18next) 在内部将app.router推送到中间件堆栈上,在加载其他与会话相关的中间件之前,但您的代码似乎并非如此。
标签: ajax node.js session express ember.js