2016-07-25 12 views
0

nodejsを使用していますが、セッション変数が定義されているルートと同じルートではないセッション変数にアクセスしようとしています。それは、セッション変数が定義されていないことを私に伝え続けます!セッション変数がスコープの外で定義されていて、nodejsの値に設定されています

私はセッション変数を設定する場所です。正確に間違っている何

app.post('/privilage',urlencodedParser,function (req, res) { 

console.log("privilage: " + req.session.username); //Here is where I need to check and it says "undefined" 

    if(!req.session.username){ 
     res.send('-2'); 
    } 
    else res.send('1'); 
}); 

??:

var http  = require('http'); 
var express = require('express'); 
var bodyParser = require('body-parser'); 
var mysql  = require('mysql'); 
var urlencodedParser = bodyParser.urlencoded({ extended: false }) 
var app = express(); 
var dateFormat = require('dateformat'); 
var nodemailer = require('nodemailer'); 
var cookieParser = require('cookie-parser') 
var session = require('express-session'); 


app.use(cookieParser()); 

app.use(session({ 
    secret: "This_is_a_secret", 
    resave: false, 
})); 


    app.post('/auth',urlencodedParser,function (req, res) { 

     conn.query('SELECT * FROM users WHERE user_name="'+req.body.username+'" AND user_pass="'+req.body.password+'"',function(err,res1){ 
      if(err) { 
       console.log("Error!"); 
       res.send('-2'); 
      } 
      else{ 
       if(res1.length==0) { 
        console.log("No matching!"); 
        res.send('-2'); 
       } 
       else if(res1.length==1){ 
        req.session.username = req.body.username; //This is my session variable 
        console.log("Successful login with: " + req.session.username); //This works fine 
        res.send('1'); 
       } 
      } 
     }); 
    }); 

これは私がreq.session.usernameにアクセスしようとしている第2の経路でありますあなたがセッションにストアを使用していないすべての:)

+0

あなたはあなたのserver.jsやindex.jsファイルを投稿することができ作ることをお勧めしますか?エクスプレスでセッションミドルウェアを追加した場所はどこですか? –

+1

また、サイドノートでは、このコードはSQLインジェクションに対して脆弱であるようです。 – ROAL

+0

あなたのために自分の投稿を編集しました。ありがとう。注射については、後で修正するつもりです。 –

答えて

0

ため

感謝。セッションがメモリに保存され、アプリケーションの再起動時にリセットされることを意味します。

app.use(session({ 
    secret: "This_is_a_secret", 
    resave: false, 
    store: ... 
})); 

ログインリクエストとチェックリクエストの間でアプリケーションを再起動しないように注意してください。


また、私はあなたのコード内のいくつかの変更

conn.query('SELECT * FROM users WHERE user_name="'+req.body.username+'" AND user_pass="'+req.body.password+'"', function(err, qres){ 
    if(err) { 
     console.log("Error!", err.message); 
     return res.send('-2'); // Maybe best way is res.status(401).end()? 
    } 

    if (qres.length == 0) { 
     console.log("No matching!"); 
     return res.send('-2'); 
    } 

    if (qres.length != 1) // unbelievable case, but check it 
     throw new Error("Smth wrong"); 

    req.session.username = req.body.username; 
    console.log("Successful login with: " + req.session.username);      
    res.send('1'); 
} 
+0

助けてくれてありがとう。私はそれらの変更を行います –

関連する問題