node.js - passport.js 中的多个会话
问题描述
中间件设置
var session = require('express-session');
var passport = require('passport');
app.use(session({
secret: 'secret',
saveUninitialized: true,
resave: true
}));
app.use(passport.initialize());
app.use(passport.session());
我有两个单独的用户登录。一个是客户,另一个是商人
客户护照会话代码
var passport = require('passport');
var Strategy = require('passport-local').Strategy;
app.post('/login',
passport.authenticate('local', {successRedirect:'/customer/home', failureRedirect:'/customer/login',failureFlash: true}),
function(req, res) {
req.session.user=user;
res.redirect('/customer/home');
});
passport.serializeUser(function(user, cb) {
cb(null, user._id);
});
passport.deserializeUser(function(id, cb) {
data.customerid(id, function (err, user) {
if (err) { return cb(err); }
cb(null, user);
});
});
passport.use(new Strategy(
function(username, password, cb) {
data.customerlogin(username, function(err, user) {
if (err) {
return cb(err);
}
if (!user) {
return cb(null, false);
}
if (user.password != password) {
return cb(null, false);
}
return cb(null, user);
});
}));
它适用于一个用户如何为另一个用户的商人创建另一个会话
解决方案
第一个问题大概是这个
function(req, res) {
req.session.user=user;
res.redirect('/customer/home');
});
user
inreq.sessson.user = user
很可能是未定义的。我建议您在此处查看您尝试实现的逻辑,并重新检查代码是否实现了该逻辑。
只有一个会话可能更简单。会话可以是客户角色或商家角色。然后,用户可以根据角色访问 Web 应用程序的某些部分。
推荐阅读
- vue.js - 如何从 Uppy 的回调事件中访问“this”
- python - python scrapy页面源与按下F12时显示的不同
- python - 如何将我在 python 输出中收到的 mqtt 数据保存在文本中?
- reactjs - 参考选择和选项如何使用
- javascript - 如何在 iframe 中使用 Leaflet.js 中的地图
- javascript - 如何设置可以从多个事件侦听器引用的函数并为每个元素使用不同的属性?(JS)
- iis - 由于端口 8080 已添加到 wsdl 肥皂地址位置中的域,因此肥皂 Web 服务无法使用
- authentication - JHipster - 单页应用程序 - OAuth2 / OIDC 和访问令牌位置
- fluentd - FluentD 重命名处理的文件
- dropdown - JExcel / Jspreadsheet - 组下拉列表未显示