React Native向Django发token时Authorization头显示[object Object]问题
问题根因分析
- getAccessToken 函数返回值异常:你定义了async函数,但内部没有返回
Auth.currentSession()的执行结果,then回调中返回的jwtToken没有被外层函数传递出去,导致该函数返回的Promise最终resolve的值为undefined。 - 异步逻辑未正确等待:首次调用
getAccessToken()时没有等待异步执行完成,直接将Promise对象拼接进Authorization头,Promise调用toString()的结果就是[object Object],因此Django侧收到的请求头值为Bearer [object Object]。
修复方案
第一步:修复getAccessToken函数
统一用async/await语法简化异步逻辑,确保返回正确的jwtToken:
import {Auth} from 'aws-amplify'; export async function getAccessToken() { try { // 不需要获取currentUser的话可以删掉这行 await Auth.currentAuthenticatedUser(); const session = await Auth.currentSession(); const accessToken = session.getAccessToken(); const jwtToken = accessToken.jwtToken; console.log(jwtToken) return jwtToken; } catch (error) { console.log('登录态获取错误:', error); // 抛出错误让外层逻辑捕获处理 throw error; } }
第二步:修复getPosts的异步调用逻辑
用async/await写法保证拿到token后再发起请求:
const getPosts = async () => { try { // 等待异步获取token完成 const token = await getAccessToken(); const config = { headers: { Authorization: `Bearer ${token}` } }; const response = await axios.get(`${url}/posts`, config); console.log(response) setData(response.data); } catch (error) { console.log(JSON.stringify(error)); } }
内容的提问来源于stack exchange,提问作者user12314098
相关产品推荐
相关产品推荐

