Javascript 如何验证JsonWebtoken错误“;SyntaxError:位置75处的意外标记n JSON;?

Javascript 如何验证JsonWebtoken错误“;SyntaxError:位置75处的意外标记n JSON;?,javascript,node.js,jwt,Javascript,Node.js,Jwt,我正在为用户注册编写逻辑,我希望在将数据持久化到数据库之前强制用户验证电子邮件。其思想是生成一个JSON web令牌,并在用户注册时将其发送给客户端。然后我发送一封带有验证链接的电子邮件,并从客户端发送的头或查询参数中提取JSON令牌。 一切正常,但当我运行jwt.verify()时,它只在令牌正确的情况下工作。出于测试目的,如果我尝试调整令牌,它将不起作用,这是期望的结果。但是,它不允许我向用户发送响应,在这种情况下,它只会出现一个错误“SyntaxError:Unexpected token

我正在为用户注册编写逻辑,我希望在将数据持久化到数据库之前强制用户验证电子邮件。其思想是生成一个JSON web令牌,并在用户注册时将其发送给客户端。然后我发送一封带有验证链接的电子邮件,并从客户端发送的头或查询参数中提取JSON令牌。 一切正常,但当我运行jwt.verify()时,它只在令牌正确的情况下工作。出于测试目的,如果我尝试调整令牌,它将不起作用,这是期望的结果。但是,它不允许我向用户发送响应,在这种情况下,它只会出现一个错误“SyntaxError:Unexpected token n JSON at position 75”,但只有在标记正确时才起作用。这是我的Javascript逻辑的问题还是jsonwebtokens就是这样工作的

helper.js

export default class Helper {
    constructor(){};

    /** generate jwt token */
    async generateToken (user) {
        return new Promise ( async (resolve, reject) => {
          const token = await jwt.sign(user, config.jwtSecret);
          if(!token) {
              reject();
              console.log('Failed to generate Jwt token')
            }
          if(token) {
              resolve(token);
            }
            else {
                reject();
                console.log('Somthing went wrong generating jwt token')
            }
        })

      }

    /** verify token */
    async verifyToken (token) {
        return new Promise ( async (resolve, reject) => {
            const isVerified = await jwt.verify(token, config.jwtSecret);
            if(!isVerified) {
                reject();
                console.log('Failed to verify jwt token')
            }
            if(isVerified) {
                resolve(isVerified);
            }
            else {
                reject();
                console.log('Error')
            }
        })
    }

    /** generate random string */
    async generateRanStr () {
        return crypto.randomBytes(20);
    }
}
routes.js

import express from 'express';
import Helper  from '../helpers/helpers';
import { Database } from '../database/db';
const Stylist = require('../models/stylist');

const router = module.exports = express.Router();

/** @POST Register new stylist */
router.post('/register', (req, res, next) => {
  /** validate user registration input */
  Stylist.validateInput().validate(req.body, async (err, user) => {
    if(err || !user) {
      return res.status(400).json({message: err.message})
    }
    if(user) {
      /** generate link token */
      const helper = new Helper();
      const token = await helper.generateToken(user);
      if(!token) {
        console.log('Failure to generate JWT Token');
        return res.status(500).json({ message: 'Internal server error' });
      }
      if(token){
        const emailSent = await Stylist.sendVerificationEmail(user.email, token);
        if(!emailSent) {
          console.log('Unable to send verification email');
          return res .status(500).json({ message: 'Internal server error...' })
        }if(emailSent) {
          res.status(200).json({ message: 'Please check your email for verification link', key: token });
        }
      }
    }
  });
});

/** @POST Verify new stylist registration */
router.post('/verify', async (req, res, next) => {
  console.log(req.query.key)
  /** verify token */
  const helper = new Helper();
  helper.verifyToken(req.query.key).then((verified) => {
    res.json(verified)
  }).catch((err) => {
    res.json(err.message)
  })

});
控制台中的错误

Application running...
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiQ2xlYXJtaW5kIiwiZW1haWwiOiJjY2hldGVrd2VAZ21haWwuY29tIiwic3BlY2lhbHR5IjoiTm9kZS5qcyBZXZlbG9wZXIiLCJpYXQiOjE1NjgxOTgyMzF9.ZpKu_S4P9sOkFmzGD04ZIvbNJ8IFRXA80MT-kqC6ijQ
(node:8768) UnhandledPromiseRejectionWarning: SyntaxError: Unexpected token n JSON at position 75
    at JSON.parse (<anonymous>)
    at Object.jwsDecode [as decode] (C:\Users\Tasman\Desktop\Project\beautify\node_modules\jws\lib\verify-stream.js:71:20)
    at module.exports (C:\Users\Tasman\Desktop\Project\beautify\node_modules\jsonwebtoken\decode.js:5:21)
    at Object.module.exports [as verify] (C:\Users\Tasman\Desktop\Project\beautify\node_modules\jsonwebtoken\verify.js:69:20)
    at _callee3$ (C:\Users\Tasman\Desktop\Project\beautify\dist\helpers\helpers.js:123:61)
    at tryCatch (C:\Users\Tasman\Desktop\Project\beautify\node_modules\@babel\runtime\node_modules\regenerator-runtime\runtime.js:45:40)
    at Generator.invoke [as _invoke] (C:\Users\Tasman\Desktop\Project\beautify\node_modules\@babel\runtime\node_modules\regenerator-runtime\runtime.js:271:22)
    at Generator.prototype.<computed> [as next] (C:\Users\Tasman\Desktop\Project\beautify\node_modules\@babel\runtime\node_modules\regenerator-runtime\runtime.js:97:21)
    at asyncGeneratorStep (C:\Users\Tasman\Desktop\Project\beautify\node_modules\@babel\runtime\helpers\asyncToGenerator.js:3:24)
    at _next (C:\Users\Tasman\Desktop\Project\beautify\node_modules\@babel\runtime\helpers\asyncToGenerator.js:25:9)
    at C:\Users\Tasman\Desktop\Project\beautify\node_modules\@babel\runtime\helpers\asyncToGenerator.js:32:7
    at new Promise (<anonymous>)
    at C:\Users\Tasman\Desktop\Project\beautify\node_modules\@babel\runtime\helpers\asyncToGenerator.js:21:12
    at C:\Users\Tasman\Desktop\Project\beautify\dist\helpers\helpers.js:149:34
    at new Promise (<anonymous>)
    at _callee4$ (C:\Users\Tasman\Desktop\Project\beautify\dist\helpers\helpers.js:111:51)
(node:8768) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:8768) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
应用程序正在运行。。。
EYJHBGCOIJIUZI1NIISINR5CCI6IKPXVCJ9.EYJUY1LIJOIQ2XLYXJTAW5KIIWIZW1HAWWIJJY2HLDGVRD2VAZ21HAWWWUY2LHBHR5IJ0IJ9KZS5QCYBZXZLBG9WZZXIILCJYXQOJENJYMZF9.ZpKu\S9SOKFMZGD04ZGD04ZIVBJ8IFR80MT-KQC6IJJQ
(节点:8768)未经处理的PromisejectionWarning:SyntaxError:位置75处的意外标记n JSON
在JSON.parse()处
在Object.jwsDecode[as decode](C:\Users\Tasman\Desktop\Project\beautify\node\u modules\jws\lib\verify stream.js:71:20)
在module.exports(C:\Users\Tasman\Desktop\Project\beautify\node\u modules\jsonwebtoken\decode.js:5:21)
在Object.module.exports[as verify](C:\Users\Tasman\Desktop\Project\beautify\node\u modules\jsonwebtoken\verify.js:69:20)
在_callee3$(C:\Users\Tasman\Desktop\Project\beautify\dist\helpers\helpers.js:123:61)
在tryCatch(C:\Users\Tasman\Desktop\Project\beautify\node\u modules\@babel\runtime\node\u modules\registrator runtime\runtime.js:45:40)
在Generator.invoke[as _invoke](C:\Users\Tasman\Desktop\Project\beautify\node\u modules\@babel\runtime\node\u modules\registrator runtime\runtime.js:271:22)
在发电机上。原型。[作为下一步](C:\Users\Tasman\Desktop\Project\beautify\node\u modules\@babel\runtime\node\u modules\registrator runtime\runtime.js:97:21)
在asyncGeneratorStep(C:\Users\Tasman\Desktop\Project\beautify\node\U modules\@babel\runtime\helpers\asyncToGenerator.js:3:24)
下一步(C:\Users\Tasman\Desktop\Project\beautify\node\u modules\@babel\runtime\helpers\asyncToGenerator.js:25:9)
在C:\Users\Tasman\Desktop\Project\beautify\node\u modules\@babel\runtime\helpers\asyncToGenerator.js:32:7
在新的承诺()
在C:\Users\Tasman\Desktop\Project\beautify\node\u modules\@babel\runtime\helpers\asyncToGenerator.js:21:12
在C:\Users\Tasman\Desktop\Project\beautify\dist\helpers\helpers.js:149:34
在新的承诺()
在_callee4$(C:\Users\Tasman\Desktop\Project\beautify\dist\helpers\helpers.js:111:51)
(节点:8768)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:1)
(节点:8768)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。
我刚刚将我的“jsonwebtoken”npm包降级为“jsonwebtoken”:“^8.5.1”,它对我很有效


*NODEJS解决方案

该错误强烈建议您发送格式错误的JSON数据。你能分享你发送的JSON数据吗?这是测试的重点我正在发送一个格式错误的JSON令牌,我想向客户端发送一个错误响应,但它不允许我这样做,它只会抛出一个错误并退出进程我的逻辑是if(invalidtoken){res.send(error message)}if(validToken){do something…}。但是它只适用于第二个,第一个抛出一个错误并退出processplus,您不应该将async与new Promise一起使用,因为async始终返回Promise使用以下任何一个them@HemantRajpoot谢谢,原来是这样,现在一切都正常了