この質問には多くのバリエーションがありますが、私の問題は解決していないようです。 Express
を使用してNode.js
サーバーを設定しようとしています。ここに私のサーバー構成がある:Express/NodeJSのreq.session変数にアクセスできない
var express = require('express'),
RedisStore = require('connect-redis')(express);
var app = express();
app.use(express.urlencoded());
app.use(express.json());
app.use(express.cookieParser());
app.use(express.session({
store: new RedisStore(),
secret: APP_SECRET
}));
// Initialize redis connection
var client = redis.createClient();
client.on('connect', function() {
console.log('Connected to Redis server')
})
client.on('error', function (err) {
console.log('Error ' + err);
});
// Enable cross-origin resource sharing
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'X-Requested-With');
next();
});
var api = require('./controllers/api.js');
app.post('/login', api.login);
app.get('/auth', api.auth);
app.listen(3000);
そして、ここではいくつかの簡単なルートです:
exports.login = function(req, res) {
var user = new User(req.username, req.password);
req.session.user = user;
console.log(req.session.user); //works
res.json({user:user});
}
exports.auth = function(req, res) {
console.log(req.session.user); //doesn't work
res.json(req.session.user);
}
だから私のlogin
ルートに予想通り、私はセッション変数を印刷することができます。しかし、login
ルートを訪問した後にauth
ルートにアクセスした場合、セッション変数は定義されていません。 Expressセッションを動作させるにはどうすればよいですか?
愚かな質問が、あなたが実際に応答を送信しない掲示ルートハンドラ。 'login'からレンダリングやリダイレクトを試みましたか?あなたのセッションはクッキーに保存されませんが、クッキーはそのプロセスで使用されます。応答がない場合、それはブラウザに戻ることはありません。 – juanpaco
@juanpaco私は実際に応答を編集しましたが、わかりやすくするために戻しておきます。 –