当我请求 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 但这也不起作用,而且控制台中没有解码的输出
在token使用之前添加sign方法即可 令牌=signToken(123);