簡體   English   中英

另一個express.js req.session不存儲數據

[英]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。 因此,也許代碼的其他部分出了問題。

測試設置:

  • Ubuntu Desktop 13.10,64位
  • 節點0.10.26
  • NPM 1.4.4
  • 快遞3.4.8
  • cors 2.2.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM