尽管在 header 中设置了有效的 JWT,但来自 axios 的 Post Request 总是返回 Unauthorized / Axios Deletes Headers
Posted
技术标签:
【中文标题】尽管在 header 中设置了有效的 JWT,但来自 axios 的 Post Request 总是返回 Unauthorized / Axios Deletes Headers【英文标题】:Post Request from axios always returns Unauthorized despite having valid JWT set in header/Axios Deletes Headers 【发布时间】:2021-10-28 20:09:34 【问题描述】:我设置了passport-local来登录一个用户,然后一旦登录,用户就会通过passport-JWT获得一个JWT token。 JWTStrategy 设置为使用
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken()
以便 JWT 可以使用 Authorization 标头 Authorization: `Token $userContext.token`
发送。在我的反应客户端中,我使用 axios 设置了一个GET
请求,如下所示:
const fetchProfileDetails = async(config)=>
const res = await axios.get("http://localhost:8080/users/me", config)
const config =
method:"GET",
withCredentials: true,
headers: Authorization: `Bearer $userContext.token`
此请求成功验证并从 /me 返回用户数据。
现在问题来了:当我使用完全相同的请求结构,但将方法切换为在 axios 请求和后端的快速路由中发布时,请求总是以401 Unauthorized
响应。
但是,当我从 POSTMAN 发送相同的请求时,使用未经授权的请求中使用的相同承载令牌,请求成功且没有任何错误。
TLDR:GET 请求使用 JWT 令牌并返回 200 状态码,而使用 POST 方法的相同请求返回 401 状态码。
我在这里错过了什么??!
【问题讨论】:
【参考方案1】:您可能在那里使用GET
,而不是在任何地方使用POST
。
在您的代码中,您只有 get
的代码。您还需要为post
编写代码。
以下是post
的代码供您参考:
router.post('/', config, async(req, res, next) =>
const error = validateBody(req.body);
if (error)
return res.status(400).send(error.details[0].message);
const newData= new passport( name: req.body.name );
await newData.save();
console.log('saving the document');
res.send(newData);
)
您的代码也应该有post
。编写单个代码将不起作用。您需要为每种情况和每种可能性编写代码。所以就像get
需要post
的代码一样,如果你有patch
或delete
或put
的条件,你也必须为此编写axios 方法。
希望这对您有所帮助。
【讨论】:
感谢您的回复。我在服务器上设置了一个 get 和一个 post 路由来处理每种类型的请求。所以这不是问题。【参考方案2】:我已经找到了解决此问题的方法。出于某种原因,axios 没有维护我在配置变量中设置的 Authorization 标头,并在发出请求时将其删除。为了解决这个问题,我只需要重新调整我的 axios 请求,使其看起来像这样:
const res = await axios(
method:'POST',
url:"http://localhost:8080/users/test",
headers:'Authorization':`Bearer$token`
)
我觉得自己被骗了,因为我花了很多时间在这上面,但解决方案实在是太让人失望了。 Axios 一直在欺骗我:/
【讨论】:
以上是关于尽管在 header 中设置了有效的 JWT,但来自 axios 的 Post Request 总是返回 Unauthorized / Axios Deletes Headers的主要内容,如果未能解决你的问题,请参考以下文章
尽管在 matplotlib 中设置了不可见轴,但 eps 图像中的幻轴
tsc compile in React (create-react-app) 需要显式编译标志,尽管我在 tsconfig.json 中设置了它们