首页 > 解决方案 > 如何找到使用 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));
}

标签: javascriptnode.jsmongodbrestfetch

解决方案


首先,假设您使用的是ExpressJS我建议利用express-jwt中间件来处理请求身份验证和发布新令牌。

您需要记住的是,您需要userId在对 JWT 有效负载中的用户进行身份验证时包含 ,以便之后能够从有效负载中检索它。

当用户通过身份验证时,您必须将令牌存储在应用程序的状态或localStorageor中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进行身份​​验证。希望能帮助到你。:)


推荐阅读