【发布时间】:2014-04-26 16:21:00
【问题描述】:
我盯着同一个 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){
我在"Cannot access req.session variables in Express/NodeJS" 中找到了答案,但最后一部分已经消失了:
在您的情况下,您已分配 req.session.user = user;只有在 /登录请求。它将无法用于进一步的请求 (/auth)。
您也必须通过会话 ID 在 /auth 请求中获取用户信息。 (或)更好的是,您可以使用护照进行身份验证。
怎么样?您如何“通过会话 ID 在 /auth 请求中获取用户信息”?
请询问您需要解决的任何其他问题。 我难住了。我已经尝试了一些愚蠢的东西!
【问题讨论】:
-
你用什么浏览器访问Express服务器?
-
Chrome 是首选浏览器。
标签: javascript node.js session express session-variables