【发布时间】:2021-04-16 00:32:27
【问题描述】:
我试图用不记名令牌从我的前面到我的 api 进行授权,在我的 api 中所有它的工作我都用 insmonia 测试,当我尝试以这种方式在标题中添加授权时,问题就在前面,我使用 react-redux 存储所以和 redux-persist 持久化数据持久化,当我尝试添加这个
export function setToken({ payload }) {
if (!payload) return;
const { token } = payload.auth;
if (token) {
api.defaults.headers.authorization = `Bearer ${token}`;
}
}
export default all([
takeLatest('@auth/persist/REHYDRATE', setToken),
takeLatest('@auth/SIGN_IN_REQUEST', signIn),
takeLatest('@auth/SIGN_UP_REQUEST', signUp),
]);
但是当我重新加载我的管理页面时,我在浏览器中进行 httprequests(post/get etc),它没有在标题中接收授权并说 createError.js:16 Uncaught (in promise) 错误:请求失败,状态码为 401
Request URL: http://localhost:3333/notifications
Request Method: GET
Status Code: 401 Unauthorized
Remote Address: [::1]:3333
Referrer Policy: strict-origin-when-cross-origin
RESPONSE HEADERS
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 23
Content-Type: application/json; charset=utf-8
Date: Mon, 11 Jan 2021 00:52:14 GMT
ETag: W/"17-IQ4NhR9c983ggGeU6wL1lrE99jM"
Keep-Alive: timeout=5
X-Powered-By: Express
REQUEST HEADERS
Accept: application/json, text/plain, */
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cache-Control: no-cache
Connection: keep-alive
Host: localhost:3333
Origin: http://localhost:3000
Pragma: no-cache
Referer: http://localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Sec-GPC: 1
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36
我做错了什么?如何添加不记名和令牌的授权?
如果有助于理解问题,这是我的项目存储库 https://github.com/dariocoroneldev/Error
【问题讨论】:
-
我尝试导入 axios 并以这种方式制作。 axios.defaults.headers.common.Authorization =
Bearer ${token};但即使这样仍然无法正常工作 -
我没有专门使用
redux-persist,所以我不能说是否存在与此相关的问题,但我假设它会重新加载状态,但它会在不调用的情况下这样做您的任何操作,因此永远不会调用setToken,因此永远不会设置身份验证。我个人有一个类似的设置,除了我在我的应用程序的顶层获取我保存的令牌并确保在加载时设置它。我还会跟踪是否设置了身份验证,并且通常在使用“useEffects”进行许多 API 调用之前等待它被应用。 -
作为个人经验的附注,我还使用 redux-thunk 进行 API 调用,我可以轻松访问状态并将标头插入所有
fetch调用,而无需将其传递到行动。我还为每个 API 调用提供了一个状态变量,因此我可以轻松跟踪正在加载或完成的内容或有一些错误等。 -
非常感谢您的建议,我要去研究redux-thunk,我从来没有听说过,可以帮助我谢谢
-
redux-thunk 本身并不能解决这个问题,但可以让生活更轻松,尤其是根据我的经验,对于身份验证和 API 调用。
标签: reactjs authentication react-redux jwt