首页 > 解决方案 > 如何获取发出请求的用户的 ID

问题描述

如何获取创建新文章的用户的 ID。我已经使用 JWT 创建了我的身份验证中间件。这是我的创建文章代码。

exports.createArticle = (req, res) => {
  const { title, article } = req.body;
  const query = {
    text: 'INSERT INTO article (title, article) VALUES ($1, $2) RETURNING *',
    values: [title, article],
  };
  pool
    .query(query)
    .then((response) => {
      const { id, created_on } = response.rows[0];
      res.status(201).json({
        message: 'Article successfully posted',
        articleId: id,
        createdOn: created_on,
        title,
      });
    })
    .catch((error) => {
      res.status(400).json({
        error,
      });
    });
};

标签: node.jsexpressjwt

解决方案


您可以从 JWT 声明中获得。以下是标准声明列表:JWT 声明

根据您的情况,主题、电子邮件、姓名或昵称将是合适的。

如果您需要一个内部 id,例如数据库主键 - 然后使用主题 id 链接到该内部 id。将内部引用泄漏到外部并不是一种好的做法。

提出的架构

如何获取主题ID:

const jwt = require("jsonwebtoken");
// this is just for test, get a real verified token from your middleware
const testToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
const token = jwt.decode(testToken);
let subjectId = token.sub; // then lookup and insert into database

您可以通过阅读此处的 OpenID Connect 规范了解更多信息: ID 令牌部分的OpenID Connect 规范第 2.2 节。


推荐阅读