gpt4 book ai didi

node.js - req.user 在 1-2 分钟后使用 passport.js 清除

转载 作者:搜寻专家 更新时间:2023-11-01 00:50:35 25 4
gpt4 key购买 nike

我的应用程序出现问题,req.user 持续存在。在成功登录/serializeUser 等之后,我可以在保存的文件中看到 req.user,并且应用程序按预期运行大约 1-2 分钟。之后,req.user 清除为未定义。我目前正在使用 react 并调用一个方法到服务器以确认 componentDidMount 上有一个 req.user。我不知道为什么,我对此很陌生。

在我的 server.js 中:

app.use(bodyParser.json())

// Sessions
app.use(
express-session({
secret: 'feedmeseymour',
cookie: { maxAge: 60000 },
store: new MongoStore({ mongooseConnection: dbConnection }),
resave: false,
saveUninitialized: false
})
)
// MIDDLEWARE
app.use(morgan('dev'))
app.use(
bodyParser.urlencoded({
extended: false
})
)
app.use(bodyParser.json())
app.use(express.static('public'));
app.use(cors());
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
// Passport
app.use(passport.initialize())
app.use(passport.session())

我的登录路径:

router.post(
'/',
function (req, res, next) {
console.log('Received login information. Username: ' + req.body.username)

const {errors, isValid } = validateLoginInput(req.body);

if (!isValid) {
return res.status(400).json(errors);
}

next()
},
passport.authenticate('local', {failWithError: true }),
function (req, res, next) {
console.log('req.user in the backend: ' + req.user);
var userInfo = req.user
res.send(userInfo);
},
function (err, req, res, next) {
res.status(401).send({ success: false, message: err })
}
)

passport.serializeUser/反序列化方法:

passport.serializeUser((user, done) => {
console.log('*** serializeUser called, user: ')
console.log(user) // the whole raw user object!
console.log('---------')
done(null, { _id: user._id })
})

// user object attaches to the request as req.user
passport.deserializeUser((id, done) => {
console.log('DeserializeUser called')
User.findOne(
{ _id: id },
'username',
(err, user) => {
console.log('*** Deserialize user, user:')
console.log(user)
console.log('--------------')
done(null, user)
}
)
})

在 componentDidMount 上调用:

getUser() {
axios.get('/users').then(response => {
if (response.data.user) {
this.setUser(true, response.data.username, response.data.super);
}
else {
console.log('no user is logged in')
this.setUser(false, null, false);
}
})
}

在后面调用这条路由:

router.get('/', (req, res, next) => {
console.log('req.user:');
console.log(req.user);
console.log('------------');
console.log('req.session:');
console.log(req.session);
console.log('------------');
if (req.user) {
User.findOne({ _id: req.user._id }, (err, user) => {
if (err) {
console.log('logged user retrieval error: ', err)
} else if (user) {
console.log('found user from _id: ' + user);
res.json({ user: req.user, super: user.super })
}
})
} else {
res.json({ user: null })
}
})

req.user 在后面存在大约 1-2 分钟,然后变为 undefined。我将用户存储在 mongodb 的商店中,我可以看到 session 仍然存在。

req.user 与信息一起保存。稍后,这将更改为未定义:

req.user:
{ _id: 5b7ded93525742053a6dd155, username: 'admin' }
------------
req.session:
Session {
cookie:
{ path: '/',
_expires: 2018-09-09T07:10:22.902Z,
originalMaxAge: 60000,
httpOnly: true },
passport: { user: { _id: '5b7ded93525742053a6dd155' } } }
------------

最佳答案

cookie: { maxAge: 60000 }

那是 60.000 毫秒,或 60 秒。正是您所描述的 1 分钟。

关于node.js - req.user 在 1-2 分钟后使用 passport.js 清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52241696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com