【发布时间】:2020-09-24 00:24:19
【问题描述】:
我正在尝试将标头中的令牌发送到验证令牌并仅返回布尔值的端点。
这是我的代码:
const checkLoggedIn = async () => {
let token = localStorage.getItem("user");
if (token === null) {
localStorage.setItem("user", "");
token = "";
}
console.log(token);
const tokenRes = await axios.post(
"http://localhost:5000/api/auth/user/tokenIsValid",
null,
{
headers: {
"x-auth-token": token,
},
}
);
console.log(tokenRes.data);
第一个日志是为了确保我实际上是从 localStorage 获取令牌。 第二个日志应该控制台日志真或假,这是从发布请求返回的内容。 运行发布请求时,我不断收到 500 错误。但是,如果我将实际令牌传递给标头而不是令牌变量,它会按预期工作。
即使我收到错误,当我查看控制台并看到发送的标头时,我发现我确实发送了令牌但仍然是一个错误。
我不明白为什么它不接受令牌变量。
我是初学者,如果我不够清楚,我很抱歉。
如您所见,我可以记录令牌,所以我知道我得到了它。您还可以看到令牌正在传递给 x-auth-token。但它返回无效。如果我直接传递相同的令牌,一切正常。
这是我的端点代码:
router.post("/user/tokenIsValid", async (req, res) => {
try {
const token = req.header("x-auth-token");
if (!token) return res.json(false);
const verified = jwt.verify(token, config.get("jwtSecret"));
if (!verified) return res.json(false);
const user = await User.findById(verified.id);
if (!user) return res.json(false);
return res.json(true);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
【问题讨论】:
-
您能否检查网络控制台并在标头中查看其(令牌)是否在您调用该函数时实际被传递?
-
在标头中,我看到传入的令牌。错误响应是“无效令牌”。但是,如果我直接传入令牌,它将起作用。如果有帮助,我添加了一个屏幕截图。
-
您能否在您的端点 url 中进行控制台登录,以查看其是否与屏幕截图中显示的格式相同。
-
I added the log in the endpoint and it logs the token and i get this: Server running on port 5000 [0] MongoDB Connected... [0] "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVmNWZjZjk1Yzg1YTNlNjMxMzNlZTU4NyIsImlhdCI6MTYwMDU2NzMzOCwiZXhwIjoxNjAwNTcwOTM4fQ.KMp0KXUbde6hoFUnJMDoF6BjPKAImJTT_iAVYpBW2C4"跨度>
-
问题似乎出在端点代码中,此令牌被清理的方式
Axios.post正在正常工作并成功发送令牌。
标签: javascript node.js reactjs