简体   繁体   English

使用NodeJS设置会话变量

[英]Set session variable with NodeJS

After an authentification I want to set a session variable. 经过身份验证后,我想设置一个会话变量。 The goal is to acess to the id of user on every views. 目的是在每个视图上访问用户ID。

I use express and express-session. 我使用快速和快速会话。 My problem is that when I want to access to the session variable. 我的问题是,当我想访问会话变量时。 I don't find if they are initialisations to do before using it. 我找不到使用它们之前是否要进行初始化。 Because when I use : 因为当我使用时:

 if(req.session.username) 

for example, I have an error : username is not defined. 例如,我有一个错误:未定义用户名。

app.js : app.js:

 var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cors=require('cors'); //var index = require('./routes/index'); //var users = require('./routes/users'); var UsersDB=require('./routes/UsersDB'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(cors()); app.use(logger('dev')); app.use(express.static(path.join(__dirname, 'public'))); //app.use('/', index); //app.use('/users', users); app.use('/Users',UsersDB); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); app.use(function(req, res, next) { res.set({'Content-Type': 'text/plain; charset=utf-8;', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST, DELETE, OPTIONS', 'Access-Control-Allow-Headers': 'X-PINGOTHER', 'Access-Control-Max-Age': '1728000'}); next(); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app; 

UsersDB.js : UsersDB.js:

 var express = require('express'); var router = express.Router(); var Users=require('../models/Users'); var multer = require('multer'); var crypto = require('crypto'); var cookieParser = require('cookie-parser'); var session = require('express-session'); var app = express(); app.use(cookieParser()); app.use(session({ secret: "fd34s@!@dfa453f3DF#$D&W", resave: false, saveUninitialized: true, cookie: { secure: false } })); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now() + ".png") } }); var upload = multer({ storage: storage }).single('avatar'); router.post('/login',function(req,res,next) { upload(req, res, function (err) { if (err) { // An error occurred when uploading return } // Everything went fine console.log(req.body); var login = req.body.username; var pass = req.body.password; if(req.session.username) { console.log(req.session.username); } else{ req.session.username = "toto"; } const hash = crypto.createHmac('sha256','YouOu').update(pass).digest('hex'); Users.getUsersByEmail(login,function(err,rows) { if(rows == null){ res.end("No such user"); return; } if(rows[0].password != hash){ res.end("Wrong pass") return; } else{ res.end("Ok") return; } }) }) }); module.exports=router; 

Login.html : Login.html:

 <script type="text/javascript"> $("form[name=loginform]").submit(function(event){ //disable the default form submission event.preventDefault(); //grab all form data var formData = new FormData($(this)[0]); $.ajax({ url:'http://localhost:3000/Users/login', type: 'POST', data: formData, async: false, cache: false, contentType: false, processData: false, success: function (returndata) { if(returndata == "Wrong pass") { alert("wrong password"); } else if(returndata == "No such user") { alert("no such user"); } else { alert("Welcome"); window.location.href="index.html" } } }); return false; }); </script> 

As far as I can see the issue is that you are initializing the session in UsersDB.js on an app module that is not going to be used. 据我所知,问题在于您正在将不使用的应用程序模块上的UsersDB.js中初始化会话。 Try to initialize it in app.js instead. 尝试改为在app.js中对其进行初始化。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM