无状态会话 api 请求

Posted

技术标签:

【中文标题】无状态会话 api 请求【英文标题】:stateless session api request 【发布时间】:2018-04-17 11:27:23 【问题描述】:

我正在构建一个使用 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 的模块。我猜你没有正确地做到这一点,所以当你认为你有你想要的功能时,你没有。另外,请添加错误消息的确切措辞。 已添加导入。错误信息在那里。 【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于无状态会话 api 请求的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Zuul API 网关不会为无状态会话转发 JWT 令牌

如何理解“RESTful API 是无状态的”?

ASP.Net Core 2.1 API JWT 无 cookie 会话?

springCloud-依赖Spring Security使用 JWT实现无状态的分布式会话

使用 JPA / Hibernate 在无状态应用程序中进行乐观锁定

会话技术