javascript - 如何找到使用 jwt “登录”的当前用户的 id?我正在尝试发出 GET 请求并按特定 ID 过滤
问题描述
这是我试图访问的 api 中的端点
router.get('/:id', [jsonParser, jwtAuth], (req, res) => {
return Teams.find().sort({creator: req.params.id})
.then(teams => res.status(200).json(teams))
.catch(err => res.status(500).json({message: 'Internal server error'}));
});
提取可能看起来像这样?
function viewProfile() {
const base = '/api/teams/';
const id = idFromJwt;
const url = base + id;
return fetch(url)
.then(res => res.json())
.then(response => {
//takes response and modifies DOM
populateProfile(response);
})
.catch(err => console.log(err));
}
解决方案
首先,假设您使用的是ExpressJS
我建议利用express-jwt
中间件来处理请求身份验证和发布新令牌。
您需要记住的是,您需要userId
在对 JWT 有效负载中的用户进行身份验证时包含 ,以便之后能够从有效负载中检索它。
当用户通过身份验证时,您必须将令牌存储在应用程序的状态或localStorage
or中sessionStorage
。
如果您想在前端解码令牌,然后将其发送到 API,您可以使用一个简单的模块jwt-decode
来实现:
const jwtDecode = require("jwt-decode");
const token = window.localStorage.getItem("token"); // eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWQiOiIxMjM0NTY3ODkiLCJpYXQiOjE1MTYyMzkwMjJ9.gHqSxzWpdOUL1nRAqUJg2CtjsEZZi8FLikD41i639zY
const tokenPayload = jwtDecode(token).id; // "123456789"
请记住,如果您决定使用express-jwt
,您还需要在请求的标头中发送令牌以authorization
进行身份验证。希望能帮助到你。:)
推荐阅读
- angular - 当机器人访问站点 Angular2 时,规范元标记使用 http 而不是 https 呈现
- javascript - Websocket客户端重新连接空闲连接
- php - 产品页面中的 ACF 分类图像
- google-bigquery - BigQuery CLI:我可以将所有负载作业类型列出到特定数据集吗?
- java - JNDI 参考+RMI,加载远程.class 失败
- elasticsearch - 如何将 Elasticsearch 迁移到新服务器?
- r - 是否有一个全局命令行 knit 选项作为 eval=FALSE 用于所有块?
- java - 有没有办法遍历 R.drawable?
- javascript - 更新输入值而不将其作为参数传递给 onclick 函数,我不想使用 Id
- python - 在 Python 嵌套中添加目录的可能性?