2017-10-12 6 views
1

私は単純なログイン機能を実装しており、エクスプレスセッションにデータを保存していますが、戻すことはできません。 ログイン機能のloginDb.jsファイルで、セッション変数にuserIdを保存しています.getLoginStatus関数でuserIdにアクセスしようとしていますが、定義されていないとしてreturingしています。Node.js express-sessionに追加された変数は、次のリクエストでは未定義です

私は似たような問題に関連して多くの投稿を行ってきましたが、私の場合は何も助けませんでした。私がここで間違っていることを知りません。以下はコードです。

server.js

var express = require('express'); 
var pg = require('pg'); 
var cookieParser = require('cookie-parser'); 
var bodyparser = require('body-parser'); 
var session = require('express-session'); 
var path = require('path'); 
const port = 3000; 
const loginroute = require('./Routes/login'); 

var app=express(); 

app.use(bodyparser.json()); 
app.use(bodyparser.urlencoded({ extended: false })); 
app.use(cookieParser()); 

app.use(session({ 
    secret: 'This is a secret', 
    resave: true, 
    saveUninitialized:true, 
     cookie: { 
      secure: false, 
      maxAge: 60000 
     } 
    })); 

//Routes 
app.use('/api/loginroute',loginroute); 

app.listen(port,function(){ 
    console.log('app listening to port:'+port); 
}); 

login.js

const express = require('express'); 
const router = express.Router(); 
const db = require('../DataAccessLayer/loginDb'); 

router.get('/getLoginStatus', db.getLoginStatus); 
router.post('/login', db.login); 

module.exports = router; 

設定しloginDb.js

var config = require('../Config/config'); 
var session = require('express-session'); 
var pg = require('pg'); 
var pool = new pg.Pool(config.development.db); 

function getLoginStatus(req, res, next){ 
    var userId = req.session.userId; 
}; 

function login(req, res, next) { 
    pool.connect(function(err, client, done) { 
    if (err) { 
     console.log("not able to get connection "+ err); 
     res.status(400).send(err); 
    } 
    var q = "select id from nodetest.users where name=$1 and password=$2"; 
    client.query(q, [req.body.username, req.body.password], function(err, result) { 
     done(); 
     if(err) { 
     return console.error('error running query', err); 
     } 
     if(result.rowCount>0){ 
      req.session.userId = result.rows[0].id; 
     } 
     res.send(result.rows); 
    }); 
    }); 
}; 

module.exports = { 
    login:login, 
    getLoginStatus:getLoginStatus 
}; 
+0

どのように '/ getLoginStatus'を呼びますか? – robertklep

+0

私はhttp:// localhost:3000/api/loginroute/getLoginStatus –

+0

のような私のURLがサービスである角度4のhttp getメソッドから呼び出しています。その場合は、要求と共に資格情報を送信するように設定されていることを確認してください。 – robertklep

答えて

2

cookieParser秘密鍵の問題を解決しますexpress-session秘密鍵のものと類似しています。秘密はこのモジュールとクッキー、パーサの間で同じ ない場合の問題をもたらす可能性がクッキーパーサーを使用して

app.use(cookieParser('This is a secret')) 

Doc Says

+0

うまくいきませんでした。私はエクスプレスセッションで最新のバージョンを使用しているので、今は私がcookieParserを削除しました –

+1

コードが今うまく動いているようです...両方とも2つの異なるセッションを作成していたメソッドを呼び出す間に間違いでしたコール...とにかく、あなたの助けを感謝:) –

関連する問題