为了账号安全,请及时绑定邮箱和手机立即绑定

Typescript 从 POST 和 PATCH 获取请求中删除 Authorization 标头

Typescript 从 POST 和 PATCH 获取请求中删除 Authorization 标头

慕妹3242003 2023-08-05 11:52:29
我使用 C# 构建了一个 API,该 API 使用 JWT 令牌进行授权。在前端,我将这些令牌存储在本地存储中,并在创建请求时获取它们。创建 GET 或 DELETE 请求时,一切正常,并且使用console.log()我可以看到提取选项添加了授权标头。但是,当使用 POST 或 PATCH 方法时,授权标头在将其添加到对象后立即丢失。这是我的请求方法:const send = async (apiOptions: ApiParams): Promise<FetchReturn> => {    const accessToken = GetAccessToken()    const options: ApiOptions = {        method: apiOptions.method,        headers: {            Authorization: `Bearer ${accessToken}`        }    }    console.log(options)    if (apiOptions.data) {        options.headers = {            'Content-Type': 'application/json'        }        options.body = JSON.stringify(apiOptions.data)    }    const result = await fetch(`${getUrl()}/${apiOptions.path}`, options).then(res => res).catch(err => err)    if (!result.ok) {        if (IsExpired()) {            const refreshResult = await fetch(`${getUrl()}/api/user/refresh`, {method: 'POST', headers:{                'Content-Type': 'application/json'            }, body: JSON.stringify(GetRefreshRequest())}).then(res => res).catch(err => err)            if (refreshResult.ok) {                Login(JSON.parse(await refreshResult.text()))                return await send(apiOptions)            } else if (refreshResult.status === 401) {                Logout()                window.location.reload()                return { code: 0, text: ""}            }        }    }    const text = await result.text()    return { code: result.status, text: text }}
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

我想在 POST 的 apiParams 中,您分配了属性“data”,稍后您将拥有完全替换请求标头对象的 if 条件。将其更改为:

    options.headers['Content-Type'] = 'application/json';

在标头中保留授权


查看完整回答
反对 回复 2023-08-05
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

第一次检查您的apiOptions.data

我认为,当你调用POST/Patch请求时它为空

只需放入console.log("...")if 语句,然后尝试解决您的错误



查看完整回答
反对 回复 2023-08-05
  • 2 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信