使用快递和护照登出 [英] logout using express and passport

查看:68
本文介绍了使用快递和护照登出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm using express.js and passport-jwt and I'm creating a middleware that checks user in every API call and then assigns to req a user. So then every time I log req.user, I get details about my user and that works fine. Then if I want to log this user out I used req.logout(), req.logOut(), req.destroy() and even I tried to assign null to req.user and it still logged in please I need help.

护照配置

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;

推荐答案

首先-您将端点用作中间件.我会尝试不使用下一个".然后-我将尝试使用req.logout()而不是req.logOut().还可以使用try-catch块包装您的await呼叫.架构承诺可能存在问题.

First - you use endpoint as middleware. I would try without 'next'. Then - I would try with req.logout() not req.logOut(). Also wrap your await call with try - catch block. Maybe there is problem with the Schema promise.

这篇关于使用快递和护照登出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆