0

我一直在试验 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)
    }
  });
});
4

1 回答 1

3

你试过Passport吗?
这个中间件将用户添加到您的会话中,我建议尝试它的passport-local提供者。
网站上的指南可能不是完整的工作代码,您最好参考examplegit repo 上的文件夹。

更新:可能是配置顺序不正确。这是我的Locomotive服务器配置(替换thisapp),试试看。

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);
于 2013-04-02T06:08:43.137 回答