[英]Another express.js req.session not storing data
我盯着相同的SO問題/答案已經太久了。
我正在嘗試在req.session變量中設置我的用戶ID
這是我的app.js堆棧
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, cors = require('cors')
, mongoose = require('mongoose')
, User = require('./user-model')
, path = require('path')
, mysql = require('mysql');
app = express()
/**
* Middleware.
*/
app.use(cors());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'supercalafragalistic' }));
app.locals.pretty = true;
app.use(express.static(path.join(__dirname, 'public')));
app.set('view engine', 'jade');
...
app.get('/someRoute', routes.someRoute)
我已經將app.router從頂部移到底部。 當前是隱含的(我在刪除代碼以查找錯誤時將其刪除)。 我已經導出了應用程序,並將應用程序包括在路線中(也已刪除)。 我添加了中間件。 我搞不清楚了.....
這是我的路線棧
//routes/index.js
//requires
var User = require('../user-model')
,qs = require('querystring')
,http = require('http')
,mysql = require('mysql')
,connection = mysql.createConnection({
edited
});
/**
* Set up application.
*/
connection.connect(function(err){
if(err) console.log('failed to connect to mysql because'+ err);
else console.log('connected to mysql');
})
我將ID保存在登錄路徑中:
//login processing route
exports.logIn = function(req, res, next){
console.log('log in request from '+req.body.name);
User.findOne({name:req.body.name}, function(err, user, next){
if(err) return next(err);
if(!user) return res.end();
//check password
user.comparePassword(req.body.password, function(err, isMatch){
if(err) res.send('failed to find user');
console.log(""+isMatch);
if(isMatch){
console.log(user._id.toString()+' user loggd in');
//set session cookie
req.session.loggedIn = user._id.toString();
console.log('req.session.loggedIn set to :'+req.session.loggedIn );
res.send(user);
}else {
res.send('User not found try again');
}
});
});
但是,在所有其他路由中,變量未定義:
// clock status
exports.clockStatus = function(req, res, next){
var user = req.session.loggedIn;
console.log('Status route, userID: '+user);
if(user){
我在“無法訪問Express / NodeJS中的req.session變量”中找到了答案,但是最后一部分卻落空了:
在您的情況下,您已分配了req.session.user = user; 僅在/ login請求中。 它不能用於進一步的請求(/ auth)。
您還必須通過會話ID在/ auth請求中獲取用戶信息。 (或者)更好的是,您可以使用護照進行身份驗證。
怎么樣? 您如何“也通過會話ID在/ auth請求中獲取用戶信息”?
請要求您處理我的其他事情。 我很沮喪 我已經嘗試過一些愚蠢的東西!
如果您不先在瀏覽器中登錄,則該變量在其他路徑中未定義。 這是我的測試代碼:
var express = require('express');
var cors = require('cors');
app = express();
app.use(cors());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'this is a test' }));
app.use(express.static(require('path').join(__dirname, 'public')));
app.get('/login', function(req, res) {
req.session.uid = 'user001';
res.send(req.session);
});
app.get('*', function(req, res) {
res.send(req.session);
});
app.listen(8080);
首先在瀏覽器中訪問http://localhost/login
。 然后在此瀏覽器中訪問其他URL(例如http://localhost/test
),返回會話中的用戶ID。 因此,也許代碼的其他部分出了問題。
測試設置:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.