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プロバイダーを試すことをお勧めします。
Web サイトのガイドは、完全に機能するコードではない可能性がありexampleます。git 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 に答える