gpt4 book ai didi

node.js - 使用 Express 和 Passport 注销

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:43 25 4
gpt4 key购买 nike

我正在使用express.js和passport-jwt,我正在创建一个中间件,在每个API调用中检查用户,然后分配给req用户。因此,每次我登录 req.user 时,我都会获得有关我的用户的详细信息,并且效果很好。然后,如果我想注销该用户,我使用了 req.logout()req.logOut()req.destroy(),甚至我尝试将 null 分配给 req.user,但它仍然登录,请我需要帮助。

Passport 配置

const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
var passport = require('passport')
const User = require('../schema/userSchema')


var opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = 'social';

exports.Strategy = new JwtStrategy(opts, async (jwt_payload, done) => {
const user = await User.findOne({ _id: jwt_payload.id})
if (!user) {
return done({error:'error'}, false);
}
if (user) {
return done(null, user);
} else {
return done({error:'error'}, false);
}

})

exports.auth = passport.authenticate('jwt', { session: false })

server.js

var express = require('express')
var app = express()
var bodyParser = require('body-parser')
var cors = require('cors')
var passport = require('passport')
var passportmethods = require('./methods/passport')
var postRoute = require('./router/posts')
var authRoute = require('./router/auth')
var friendRoute = require('./router/friend')
var verif = require('./router/user')

app.use('/uploads',express.static('../backend Social/uploads'))

app.use(cors())
app.use(bodyParser.json())
passport.use(passportmethods.Strategy)

app.use('/auth',authRoute)
app.use('/post',passportmethods.auth,postRoute)
app.use('/friend',passportmethods.auth,friendRoute)
app.use('/user',passportmethods.auth,verif)


app.listen(3000,()=>console.log('server on !'))

登录和注销

const express = require('express');
const router = express.Router();
const logout = require('express-passport-logout');
const User = require('../schema/userSchema')




router.get('/isloggedin', (req, res, next) => {
if (req.user) res.send(req.user)
else res.send({ error: 'error' })
})

router.get('/logout',async (req, res, next) => {
await User.updateOne({_id:req.user._id},{$set :{connected : false}})
console.log(req.user._id)
req.logOut()
if(req.user)res.send(req.user._id)
else res.send('logged out')
})
module.exports = router;

最佳答案

据我所知,您不应该从服务器端实现注销。让您的客户端处理注销,因为我们不会将 token 存储在服务器中的任何位置。因此,要从客户端注销,您只需删除 token 即可。另外,除非您必须这样做,否则不要将 token 存储在数据库中,如果您要这样做,请像密码一样对它们进行哈希处理。将 token 存储在数据库中是有风险的,一旦数据库出现安全漏洞,入侵者将拥有一切权力。

关于node.js - 使用 Express 和 Passport 注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55193862/

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