我一直在试验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)
}
});
});
答案 0 :(得分:3)
你试过Passport
吗?
此中间件会将用户添加到您的会话中,我建议您尝试使用其passport-local
提供商
网站上的指南可能不是完全正常工作的代码,您最好参考git repo上的example
文件夹。
<强>更新强>:
它可能是配置顺序不合适。
这是Locomotive
服务器的配置(将this
替换为app
),试一试。
this.use(poweredBy(null));
this.use(express.favicon());
this.use(express.logger('dev'));
this.use(express.compress());
this.use(express.cookieParser());
this.use(express.static(__dirname + '/../../public'), { maxAge: 60*10*1000 });
this.use(express.bodyParser());
this.use(express.methodOverride());
this.use(express.session({ secret: '<SECRET>' }));
// Initialize Passport! Also use passport.session() middleware, to support
// persistent login sessions (recommended).
this.use(flash());
this.use(passport.initialize());
this.use(passport.session());
this.use(this.router);