Express-jwt не устанавливает req.user при использовании с функцией отзыва черного списка - PullRequest
0 голосов
/ 05 мая 2018

Я пробовал аутентификацию пользователя REST API с использованием express-jwt и выход из системы с использованием express-jwt-blacklist. Но когда я начал использовать функцию отзыва чёрного списка, я получаю, что express-jwt не устанавливает req.user ниже мой код:

const express = require("express")
var expressJwt = require('express-jwt');
var blacklist = require('express-jwt-blacklist');
const bodyParser = require('body-parser')
const app = express()
app.locals.authSecret="MySuperSecretKey"
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
    extended: true
}))


app.use(expressJwt({ 
    secret: app.locals.authSecret,
    isRevoked: blacklist.isRevoked,//When I remove this option details is working
    credentialsRequired: false
}).unless(function(r) {
    allowed = [
        '/user/signup',
        '/user/login'
    ]

    return allowed.indexOf(r.originalUrl) >= 0
}))

app.use(function (err, req, res, next) {
    if (err.name === 'UnauthorizedError') {
        res.json({success:false,error:"Unauthorized access token"})
        return;
    }
    next()
  });
app.get('user/login',function(req,res){
    var username =  sanitizer.sanitize(req.body.username);
    var password = sanitizer.sanitize(req.body.password);
    User.findOne({username:username}, function(err,docs){
        if(err)
            res.json({success:false,error:"Error in database connection"})
    }).cursor().on("data",function(doc)
    {
        bcrypt.compare(password, doc.password, function(err, same) {
            if(err || !same) {
                res.json({success:false,error:"Wrong username or password"})
            } else {
                var userId = doc._id
                req.user = userId
                console.log(req.user)
                res.json({success:true,authToken: jwt.sign({id: userId},req.app.locals.authSecret, {expiresIn: '10d'})})    
            }
        })
    })          
})

//Get user details by passing JWT Token in header
app.get('user/details',function(req,res){
    if(req.user) {
        User.findOne({_id:req.user.id}, function(err,docs){
            if(err) 
                res.json({success:false,error:"Error in database connection"})
        }).cursor().on("data",function(doc)
        {
            var user={
                firstName:doc.firstName,
                lastName:doc.lastName,
                username:doc.username,
                gender:doc.gender,
                email:doc.email,
                mobile:doc.mobile,        
            }
            res.json({success:true,data:user})
        })
} else {
    res.json({success:false,error:"Unauthorized access"})
}  
})

//Logout
app.get('user/logout',function(req,res){    
        blacklist.revoke(req.headers.authorization)
        res.json({success:true,message:"You have been successfully logged out"})

    })

app.listen(8080, function() {
    console.log("Started server at 8080..")
});

Код работает до входа в систему. Но когда я вызываю пользователя / данные с помощью токена JWT, я получаю ответ как «Несанкционированный токен» (req.user не установлен)

1 Ответ

0 голосов
/ 19 июля 2018

Создать токен:

jwt.sign(
            {
                user:email,
                id:id,
                account: account_id,
                permissions: permissions
            },
            process.env.SECRET_KEY,
            {   expiresIn: 60,
                subject: email
            }

Выход:

function logout(req, res) {
    blacklist.revoke(req.user);
    res.status(200).json({
        status: 'success'
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...