我正在使用JWT来验证后端api的请求,这会导致意外错误。
const generateJwt = function(rows) {
var expiry = new Date();
expiry.setDate(expiry.getDate() + 7);
return jwt.sign({
_id: 1,
email: rows.email,
name: rows.username,
exp: parseInt(expiry.getTime() / 1000),
}, "MY_SECRET"); // DO NOT KEEP YOUR SECRET IN THE CODE!
};
我使用上面的代码生成jwt并成功生成。
var jwt = require('express-jwt');
var auth = jwt({
secret: 'MY_SECRET',
userProperty: 'payload'
});
var router = express.Router();
router.get('/list',auth, controller.getMerchantList);
用户登录后,我返回jwt令牌,并在客户端拨打后端时发送令牌。
$http.get('/api/merchant/list',{
headers: {
Authorization: 'Bearer '+ authentication.getToken()
}
});
所生成的令牌:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOjEsImVtYWlsIjoia2FzaGlmcm9zaGVuN0BnbWFpbC5jb20iLCJuYW1lIjoiQXJ5YSBTdGFyayIsImV4cCI6MTQ5OTg0NjEzOSwiaWF0IjoxNDk5MjQxMzM5fQ.-CCQwiadozSOuuIk9fil4aJh8D38NwgKYP3HpvClyKw
但我仍然得到401. jwt令牌在前端。我通过console.log验证。有人可以帮我解决这个问题。
答案 0 :(得分:0)
const Jwt=require('jsonwebtoken');
function generateToken(rows,callback){
let tokenData={ _id: 1,
email: rows.email,
name: rows.username
}
return Jwt.sign(tokenData,"YOUR-SECRET-KEY",{ expiresIn: 60 * 60 },function(err,token){
if(err) callback(err);
else callback(null,token);
})
}
将此令牌发送给客户端。 从客户端收到标头中的令牌时。您需要使用Jwt验证方法验证该令牌。您的身份验证中间件应从标头中获取令牌并进行验证。
function auth(req,res,callback){
let token=req.headers.authorization;
Jwt.verify(token,"YOUR-SECRET-KEY",function(err,decodedData){
if(err)
callback(err); // you can send your custom error too
else
callback(null,decodedData);
}
)
}