jwt 令牌中的 jwt 消息格式错误

问题描述 投票:0回答:1

当我请求 get 方法时,它给出了 jwt malformed 的错误 这里的 json 说 我也尝试过添加多个令牌格式,但没有成功

{
    "status": "error",
    "error": {
        "name": "JsonWebTokenError",
        "message": "jwt malformed",
        "statusCode": 500,
        "status": "error"
    },

代码是



const {promisify}=require('util');
const jwt =require('jsonwebtoken')
const User=require('./../modals/userModal');
const catchAsync=require('../utils/catchAsync');               
const AppError=require('./../utils/appError');

const signToken=id=>{                                          
    return jwt.sign({                                          /
        id:id
    },process.env.JWT_SECRET,{  
        expiresIn:process.env.JWT_EXPIRES_IN
    }
    )
}


exports.signup=catchAsync(async(req,res,next)=>{

    const newUser=await User.create({
        name:req.body.name,                                             
        email:req.body.email,
        password:req.body.password,
        passwordConfirm:req.body.passwordConfirm,

    });

    const token=signToken(newUser._id)

    res.status(201).json({
        status:'success',
        token:token,
        data:{
            user:newUser
        }
     })
    });

//=========================================IMPLEMENTING LOGIN LOGIC============================================

    exports.login= catchAsync(async(req,res,next)=>{
        const {email,password}=req.body;
        
        //1). CHECK IF EMAIL AND PASS. EXIST OR NOT 
              if(!email || !password){
                  return next(new AppError('Please Provide Email and Password',400))
              }
 
        //2). CHECK IF USER EXISTS && PASSWORD IS CORRECT
              const user=await User.findOne({email}).select('+password');                    
            

              if(!user || !(await user.correctPassword(password, user.password))){             
                return next(new AppError('Incorrect email or password',401))
              }
        //3). IF EVERYTHING OKAY , SEND TOKEN TO CLIENT
               const token=signToken(user._id);
               res.status(200).json({
                status:'success',
                token
               })
    } );

//=======================================MIDDLEWARE FUNCTION FOR PROTECTED ROUTES==================================
                                                                                      
exports.protect=catchAsync(async(req,res,next)=>{
     

                                                                                        
       let token;                                                                        
        if(                                                                                      req.headers.authorization && 
        req.headers.authorization.startsWith('Bearer')
      ){
         token=req.headers.authorization.split(' ')[1];                          
        }
         console.log(token);

        if(!token){
            return next(new AppError('Your are not logged in! please login to get access',401))
        }



   const decoded=await promisify(jwt.verify)(token,process.env.JWT_SECRET)                              
   console.log(decoded);





                                                                                            //if 
next();
})

我尝试过应用多种类型的令牌格式 ddfdfd.dfdsfdg.gsgsdgds 但这也不起作用,而且控制台中没有解码的输出

javascript node.js mongodb express jwt
1个回答
0
投票

在token使用之前添加sign方法即可 令牌=signToken(123);

© www.soinside.com 2019 - 2024. All rights reserved.