node.js - 如何获取发出请求的用户的 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,
});
});
};
解决方案
您可以从 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 节。
推荐阅读
- javascript - 我的 jquery 日期时间选择器有错误,它改变了我关注控件的时间
- javascript - javascript根据条件从嵌套的对象数组中返回属性值
- android - Android WIFI ADB 插件不适用于某些 Android 真机?
- javascript - PageSpeed Insights 移动与桌面
- html - 页面处理,良好实践
- python - 在比较日期时间的同时从另一个数据框中填充值
- html - ngStyle 上角 5 的动画
- passport.js - Composer REST 服务器自定义身份验证
- android - android.view.InflateException: Binary XML file line #0: Error inflating class
- javascript - Spring MVC 使用 ajax 发送和接收参数