繁体   English   中英

使用NodeJS设置会话变量

[英]Set session variable with NodeJS

经过身份验证后,我想设置一个会话变量。 目的是在每个视图上访问用户ID。

我使用快速和快速会话。 我的问题是,当我想访问会话变量时。 我找不到使用它们之前是否要进行初始化。 因为当我使用时:

 if(req.session.username) 

例如,我有一个错误:未定义用户名。

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:

 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:

 <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> 

据我所知,问题在于您正在将不使用的应用程序模块上的UsersDB.js中初始化会话。 尝试改为在app.js中对其进行初始化。

暂无
暂无

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

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