Node.js 节点JS会话设置
我确实来自php背景,如果我设置了一个会话,它将特定于用户。因此,在开发过程中,我可以充当两个用户,以正常模式和匿名模式打开应用程序,并验证服务器和数据库更新之间的通信 现在我正在用Nodejs开发一个应用程序。要么我误解了使用PHP会话的express会话,要么我没有正确配置它。如果我在普通窗口中以用户身份登录并打开“匿名”窗口,会话将被重置 app.js 登录验证 因为我几乎已经完成了我的代码,我正在寻找一个类似的答案 如果由我主持,则每次用户尝试使用该应用程序时,会话都会被续订 如果否,则问题在于隐姓埋名模式。如果是,如何克服它Node.js 节点JS会话设置,node.js,session,Node.js,Session,我确实来自php背景,如果我设置了一个会话,它将特定于用户。因此,在开发过程中,我可以充当两个用户,以正常模式和匿名模式打开应用程序,并验证服务器和数据库更新之间的通信 现在我正在用Nodejs开发一个应用程序。要么我误解了使用PHP会话的express会话,要么我没有正确配置它。如果我在普通窗口中以用户身份登录并打开“匿名”窗口,会话将被重置 app.js 登录验证 因为我几乎已经完成了我的代码,我正在寻找一个类似的答案 如果由我主持,则每次用户尝试使用该应用程序时,会话都会被续订 如果否,则
希望我能把问题说清楚。我不完全清楚你在做什么来测试你的应用程序,但要回答你的主要问题,没有会话仍然是每个用户的,并且不会在任何用户登录时重置 也就是说,您描述的行为听起来很不对劲,所以您的代码中可能有一个bug。我看不到您在发布的代码中实际安装了路由的位置,因此很难看到,但我看到了两个常见的问题,即新加入的用户: 1.使用订单事项。因此,如果您在装载会话之前装载路由,您将看到奇怪之处
2建议在会话配置上设置secure属性用于生产,但会使会话看起来在开发中不起作用,因为开发人员站点通常不通过https提供服务 情况很简单。假设一个用户发布一个问题,另一个用户回答。因此,作为user-1,我打开了chrome并发布了一个问题。对于user-2,我按下Ctrl+N隐姓埋名模式并尝试以user-2身份登录。但是我的user-1会话丢失。我已更新了完整的app.js文件。如果我需要做任何改变,请告诉我。从你发布的内容我看不出来。您是否尝试过从两种不同的浏览器(如chrome和Firefox)登录以消除匿名模式下的任何异常情况?实际上,您是否也可以发布您的登录路径代码?您是在使用Passport还是发明了自己的逻辑来处理用户状态?我没有使用Passport。我已经更新了登录路径代码。在这里,我比较手机号码和otp,如果匹配,则将用户存储在req.session.user中
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var http = require('http');
var reload = require('reload');
var index = require('./routes/index');
var users = require('./routes/users');
var user = require('./routes/user');
var dashboard = require('./routes/dashboard');
var search = require('./routes/search');
var profile = require('./routes/profile');
var ajax = require('./routes/admin-ajax');
var logout = require('./routes/logout');
var app = express();
app.set('port', process.env.PORT || 3000);
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}))
app.use('/', index);
app.use('/users', users);
app.use('/user', user);
app.use('/dashboard', dashboard);
app.use('/search', search);
app.use('/profile', profile);
app.use('/admin-ajax', ajax);
app.use('/logout', logout);
app.use('/js', express.static(__dirname + '/node_modules/bootstrap/dist/js')); // redirect bootstrap JS
app.use('/js', express.static(__dirname + '/node_modules/jquery/dist')); // redirect JS jQuery
app.use('/js', express.static(__dirname + '/node_modules/jquery-ui-dist')); // redirect JS jQuery
app.use('/js', express.static(__dirname + '/node_modules/popper.js/dist/umd'));
app.use('/js', express.static(__dirname + '/node_modules/moment/min'));
app.use('/js', express.static(__dirname + '/node_modules/lodash'));
app.use('/css', express.static(__dirname + '/node_modules/jquery-ui-dist')); // redirect JS jQuery
app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css')); // redirect CSS bootstrap
app.use('/css', express.static(__dirname + '/node_modules/font-awesome/css'));
app.use('/css', express.static(__dirname + '/node_modules/animate.css'));
app.use('/js', express.static(__dirname + '/node_modules/datatables.net/js'));
app.use('/js', express.static(__dirname + '/node_modules/datatables.net-bs4/js'));
app.use('/css', express.static(__dirname + '/node_modules/datatables.net-bs4/css'));
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// 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');
});
var server = http.createServer(app)
reload(app);
server.listen(app.get('port'), function () {
console.log('Web server listening on port ' + app.get('port'))
});
module.exports = app;
user.verify_login = (req, res, next)=>{
let query = {$and:[{mobile:{$eq:req.body.mobile}}, {otp:{$eq:_.toString(req.body.otp)}}]}
db.connect(function(err, dbconnect){
if(err)
return res.status(404).send({message:'Error connecting db'});
dbconnect.collection('users').findOne(query, function(err, result){
if(err || _.isEmpty(result))
return res.send({success:false, message:'Mobile OTP doesnot match'});
result.success = true;
req.session.user = result; // I am storing session value here
return res.send({success:true, redirect:'/dashboard'});
})
});
}