【问题标题】:fastify-jwt sign token with user ID payloadfastify-jwt 使用用户 ID 有效负载签名令牌
【发布时间】:2021-08-30 23:57:11
【问题描述】:

我正在制作一个简单的登录函数,它将返回一个带有用户 ID 的令牌。

我已经使用密钥在 fastify 实例上注册了 fastify-jwt 并在对签名函数的调用中添加了用户 ID。

代码auth.js

import Fastify from "fastify";
import fastifyJwt from "fastify-jwt";
import { users } from "../dummy-data/users.js";

const fastify = Fastify();
const SECRET_KEY = "secret";
fastify.register(fastifyJwt, { secret: SECRET_KEY });

......

const signIn = function (req, res) {
  const { email, password } = req.body;
  const foundUser = users.find(
    (user) => user.email === email && user.password === password
  );
  const { id } = foundUser;
  const accessToken = fastify.jwt.sign({ id }, SECRET_KEY);
  res.status(200).send({ accessToken });
}

但这不起作用,它显示此错误:

"message": "预期的 "options" 是一个普通对象。"

{
  "statusCode": 500,
  "error": "Internal Server Error",
  "message": "Expected \"options\" to be a plain object."
}

有人知道正确的方法吗?

【问题讨论】:

  • signIn 是如何使用的?让您说“这不起作用”的预期结果与实际结果是什么? (从这里和根据文档,.sign 方法不需要 SECRET_KEY 作为第二个参数,尽管确实链接的 JWT 规范要求它。)
  • 我很困惑,因为 JWT 要求提供密钥。我发现fastify-jwt 分配时不需要 SECRET_KEY。

标签: node.js jwt fastify fastify-jwt


【解决方案1】:

签名时无需传递 SECRET_KEY

const accessToken = fastify.jwt.sign({ id });

因为注册的时候已经传给jwt-plugin了:

fastify.register(fastifyJwt, { secret: SECRET_KEY });

【讨论】:

    猜你喜欢
    • 2018-11-18
    • 2019-10-29
    • 2018-09-15
    • 2019-08-24
    • 2016-05-03
    • 2021-06-21
    • 2017-01-06
    • 2015-10-30
    • 2018-01-25
    相关资源
    最近更新 更多