无状态会话 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" );
;
【问题讨论】:
向我们展示如何导入带有authenticate
和getMe
的模块。我猜你没有正确地做到这一点,所以当你认为你有你想要的功能时,你没有。另外,请添加错误消息的确切措辞。
已添加导入。错误信息在那里。
【参考方案1】:
您的身份验证模块导出一个对象,但您这样做:
const authenticate = require("../middlewares/authenticate");
这意味着您的 const authenticate
是一个对象,而不是您的函数。将其更改为:
const authenticate = require("../middlewares/authenticate").authenticate;
或者,更改模块以直接导出函数,而不是导出包含该函数的对象。
【讨论】:
以上是关于无状态会话 api 请求的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud Zuul API 网关不会为无状态会话转发 JWT 令牌
ASP.Net Core 2.1 API JWT 无 cookie 会话?
springCloud-依赖Spring Security使用 JWT实现无状态的分布式会话