【问题标题】:stateless session api request无状态会话 api 请求
【发布时间】:2024-04-29 18:55:01
【问题描述】:

我正在构建一个使用 JWT 进行身份验证的简单应用程序。但是我不断收到错误消息,说我GET 需要回调函数。

我会期待什么?

我应该取回当前用户的数据。

我实际上得到了什么?

错误:Route.get() 需要一个回调函数但得到了一个 [object Object]

路线:

const authenticate = require("../middlewares/authenticate");
const usersController = require("../controllers").users;

app.get("/users/me", authenticate, usersController.getMe);

型号:

"use strict";
const jwt = require("jsonwebtoken");

module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define(
    "User",
    {
      email: DataTypes.STRING,
      password: DataTypes.STRING
    },
    {
      classMethods: {
        associate: function(models) {
          // associations can be defined here
        },
        findByToken: function(token) {
          const User = this;
          let decoded;

          try {
            decoded = jwt.verify(token, "leogoesger");
          } catch (e) {
            console.log(e);
          }

          return User.find({ where: { email: decoded.email } });
        }
      }
    }
  );
  return User;
};

中间件:

const { User } = require("../models/user");

const authenticate = (req, res, next) => {
  console.log("called here");
  const token = req.header("x-auth");
  User.findByToken(token)
    .then(user => {
      if (!user) {
      }

      req.user = user;
      req.token = token;
      next();
    })
    .catch(e => {
      res.status(401).send(e);
    });
};

module.exports = { authenticate };

控制器:

module.exports = {
  getMe(req, res) {
    res.status(200).send({ message: "hello" });
  }
};

【问题讨论】:

  • 向我们展示如何导入带有authenticategetMe 的模块。我猜你没有正确地做到这一点,所以当你认为你有你想要的功能时,你没有。另外,请添加错误消息的确切措辞。
  • 已添加导入。错误信息在那里。

标签: express authentication jwt express-jwt stateless-session


【解决方案1】:

您的身份验证模块导出一个对象,但您这样做:

const authenticate = require("../middlewares/authenticate");

这意味着您的 const authenticate 是一个对象,而不是您的函数。将其更改为:

const authenticate = require("../middlewares/authenticate").authenticate;

或者,更改模块以直接导出函数,而不是导出包含该函数的对象。

【讨论】: