我正在使用 nodejs 和 angular cli 制作一个 Web 应用程序我正在使用 JWT 来验证我的登录功能.但是当我处理它时抛出了这个错误
I am making a web application using nodejs and angular cli I'm using JWT to authenticate my login function . But when I process it threw this error
错误:预期的有效负载"是一个普通对象.验证时 (D:Mean_Projectsmeanauthapp ode_modulesjsonwebtokensign.js:34:11)在 validatePayload (D:Mean_Projectsmeanauthapp ode_modulesjsonwebtokensign.js:56:10)在 Object.module.exports [作为符号] (D:Mean_Projectsmeanauthapp ode_modulesjsonwebtokensign.js:108:7)在 User.comparePassword (D:Mean_Projectsmeanauthapp outesusers.js:86:27)在 bcrypt.compare (D:Mean_Projectsmeanauthappmodelsuser.js:53:9)在 D:Mean_Projectsmeanauthapp ode_modulescryptjsdistcrypt.js:297:21在 D:Mean_Projectsmeanauthapp ode_modulescryptjsdistcrypt.js:1353:21在 Immediate.next [as _onImmediate] (D:Mean_Projectsmeanauthapp ode_modulescryptjsdistcrypt.js:1233:21)在 runCallback (timers.js:785:20)在 tryOnImmediate (timers.js:747:5)在 processImmediate [as _immediateCallback] (timers.js:718:5)
Error: Expected "payload" to be a plain object. at validate (D:Mean_Projectsmeanauthapp ode_modulesjsonwebtokensign.js:34:11) at validatePayload (D:Mean_Projectsmeanauthapp ode_modulesjsonwebtokensign.js:56:10) at Object.module.exports [as sign] (D:Mean_Projectsmeanauthapp ode_modulesjsonwebtokensign.js:108:7) at User.comparePassword (D:Mean_Projectsmeanauthapp outesusers.js:86:27) at bcrypt.compare (D:Mean_Projectsmeanauthappmodelsuser.js:53:9) at D:Mean_Projectsmeanauthapp ode_modulescryptjsdistcrypt.js:297:21 at D:Mean_Projectsmeanauthapp ode_modulescryptjsdistcrypt.js:1353:21 at Immediate.next [as _onImmediate] (D:Mean_Projectsmeanauthapp ode_modulescryptjsdistcrypt.js:1233:21) at runCallback (timers.js:785:20) at tryOnImmediate (timers.js:747:5) at processImmediate [as _immediateCallback] (timers.js:718:5)
这是我的护照代码
const JwtStrategy= require('passport-jwt').Strategy;
const ExtractJwt=require('passport-jwt').ExtractJwt;
const User= require('../models/user');
const config=require('../config/database');
module.exports=function(passport){
let opts={};
opts.jwtFromRequest=ExtractJwt.fromAuthHeader();
opts.secretOrKey=config.secret;
opts.issuer = 'accounts.examplesoft.com';
opts.audience = 'yoursite.net';
passport.use(new JwtStrategy(opts,(jwt_payload,done)=>{
console.log(jwt_payload);
User.getUserById(jwt_payload._doc._id,(err,user)=>{
if(err){
return done(err,false);
}
if(user){
return done(null,user);
}
else{
return done(null,false);
}
});
}));
}
我的身份验证和获取配置文件代码
My code for authenticate and get profile
// Authenticate
router.post('/authenticate', (req, res, next) => {
const username = req.body.username;
const password = req.body.password;
User.getUserByUsername(username, (err, user) => {
if(err) throw err;
if(!user){
return res.json({success: false, msg: 'User not found'});
}
User.comparePassword(password, user.password, (err, isMatch) => {
if(err) throw err;
if(isMatch){
const token = jwt.sign(user, config.secret, {
expiresIn: 604800 // 1 week
});
res.json({
success: true,
token: 'JWT '+token,
user: {
id: user._id,
name: user.name,
username: user.username,
email: user.email
}
});
} else {
return res.json({success: false, msg: 'Wrong password'});
}
});
});
});
// Profile
router.get('/profile', passport.authenticate('jwt', {session:false}), (req, res, next) => {
res.json({user: req.user});
});
在线失败
const token = jwt.sign(user, config.secret, {
出现错误预期有效负载"是一个普通对象"
您的 user 对象在此处初始化:
Your user object is initialized here:
User.getUserByUsername(username, (err, user)
我假设是 mongoosejs 对象,它包含许多方法并且不是可序列化的".您可以通过使用 mongoose 中的 .lean() 或普通 toJSON 方法传递一个普通对象来处理这个问题:
Which I assume is mongoosejs object, which contains many methods and is not "serializable". You could handle this by passing a plain object, by either using .lean() from mongoose or plain toJSON method:
const token = jwt.sign(user.toJSON(), config.secret, {
expiresIn: 604800 // 1 week
});
这篇关于jsonwebtoken 中的有效负载错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
Math.random() 在密码学上是安全的吗?Is Math.random() cryptographically secure?(Math.random() 在密码学上是安全的吗?)
在javascript中保护随机数?Secure random numbers in javascript?(在javascript中保护随机数?)
使用过期令牌发出同时 API 请求时如何避免多个令How to avoid multiple token refresh requests when making simultaneous API requests with an expired token(使用过期令牌发出同时 API 请求时如何
JWT 未解码“JWT malformed";- 节点角度JWT not decoding quot;JWT malformedquot; - Node Angular(JWT 未解码“JWT malformed;- 节点角度)
如何使没有到期时间的 JWT 令牌无效How to invalidate a JWT token with no expiry time(如何使没有到期时间的 JWT 令牌无效)
img src 链接中的授权标头Authorization header in img src link(img src 链接中的授权标头)