Как использовать jwt из другого файла внутри почтового запроса - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь получить свой токен и проверить его из другого файла (jwt.js) внутри моего основного (app.js), просто чтобы сделать его более организованным, но когда я пытаюсь экспортировать из jwt.s в app.jsэто не работает, и почтовый запрос почтальона застревает при загрузке навсегда (он работает, когда я помещаю весь код в свой главный файл app.js)

Вот мой код внутри jwt.js

const jwt = require("jsonwebtoken");

function verifyJWT() {
  jwt.verify(req.token, "fortest", (err, authData) => {
    if (err) {
      res.sendStatus(403);
    } else {
      res.json(
        `Logged in with ${req.token} and here is some data for you ${authData}`
      );
    }
  });
}

function signJWT() {
  jwt.sign({}, "fortest", (err, token) => {
    if (err) {
      res.sendStatus(511);
    } else {
      res.json({ token });
    }
  });
}

// Verifies the Token
function verifyToken(req, res, next) {
  const headers = req.headers["authorization"];
  if (typeof headers !== "undefined") {
    const tokenArray = headers.split(" ");
    const theToken = tokenArray[1];
    req.token = theToken;
    next();
  } else {
    res.sendStatus(403);
  }
}

module.exports.verifyJWT = verifyJWT;
module.exports.signJWT = signJWT;
module.exports.verifyToken = verifyToken;

А это мой код в app.js (мой основной)

const express = require("express");
const app = express();
const jwt = require("./jwt"); // they are in same folder

// Wants the token
app.post("/api/login", jwt.verifyToken, (req, res) => {
  jwt.verifyJWT;
});

// Gives the token
app.post("/api/token", (req, res) => {
  jwt.signJWT;
});

1 Ответ

0 голосов
/ 29 июня 2019

В вашем коде две ошибки.

Во-первых, когда вы хотите использовать функцию, вы должны вызывать ее, используя (). В противном случае он действует как переменная, то есть вы можете присвоить ему новое значение или использовать его для назначения другой переменной.

app.post("/api/login", jwt.verifyToken, (req, res) => {
  jwt.verifyJWT;
});

Должно быть ...

app.post("/api/login", jwt.verifyToken, (req, res) => {
  jwt.verifyJWT(req, res);
});

Однако, так как Express вызывает функции, которые вы передаете в аргументах метода post(), вы можете проще сказать:

app.post("/api/login", jwt.verifyToken, jwt.verifyJWT);

Вторая ошибка заключается в том, что вы используете неопределенные переменные в своих функциях в файле jwt.js. Вы должны передать эти значения в качестве аргументов для использования.

function verifyJWT() {
  jwt.verify(req.token, "fortest", (err, authData) => {
    if (err) {
      res.sendStatus(403);
    } else {
      res.json(
        `Logged in with ${req.token} and here is some data for you ${authData}`
      );
    }
  });
}

function signJWT() {
  jwt.sign({}, "fortest", (err, token) => {
    if (err) {
      res.sendStatus(511);
    } else {
      res.json({ token });
    }
  });
}

Должно быть ...

function verifyJWT(req, res) {
  jwt.verify(req.token, "fortest", (err, authData) => {
    if (err) {
      res.sendStatus(403);
    } else {
      res.json(
        `Logged in with ${req.token} and here is some data for you ${authData}`
      );
    }
  });
}

function signJWT(req, res) {
  jwt.sign({}, "fortest", (err, token) => {
    if (err) {
      res.sendStatus(511);
    } else {
      res.json({ token });
    }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...