Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Apispour中的SecureStore加载头_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 从Apispour中的SecureStore加载头

Javascript 从Apispour中的SecureStore加载头,javascript,reactjs,react-native,Javascript,Reactjs,React Native,后端中的所有终结点都需要授权标头。此标头存储在SecureStore中 问题陈述 我想为登录后的每个API调用加载授权头JWT令牌。 现在,这需要一个异步操作,即authStorage.getToken 这是我的client.js,Apisoup客户端 client.js 从APISOUT导入{create}; 从../auth/storage导入authStorage; 从../config/network导入IP; const restoreToken=async=>{ 返回wait aut

后端中的所有终结点都需要授权标头。此标头存储在SecureStore中

问题陈述 我想为登录后的每个API调用加载授权头JWT令牌。 现在,这需要一个异步操作,即authStorage.getToken

这是我的client.js,Apisoup客户端

client.js

从APISOUT导入{create}; 从../auth/storage导入authStorage; 从../config/network导入IP; const restoreToken=async=>{ 返回wait authStorage.getTokenidToken; }; const apiClient=auth\u令牌==> 创造{ baseURL:http://+IP+:8990, 标题:{Authorization:auth_token},//这是我后来添加的 }; 导出默认apiClient; 这是PostsApi,它使用ApicClient进行调用

PostsApi.js

从./client导入apiClient; 常量端点=/api/; 常量bookmark端点=/bookmark/; const getPosts=last_id=0,limit=10=>{ 返回apiClient.getendpoint+?last_id=+last_id+&limit=+limit; }; const-toggleBookmark=item\u-id=>{ 返回apiClient.getbookmarkEndpoint+?item_id=+item_id; }; 导出默认值{ getPosts, 切换书签, }; 我的理解 我知道,如果我能在client.js中添加头,每次有API调用时都会注入头。 我试过:

const restoreToken=async=>{ 返回wait authStorage.getTokenidToken; }; 但是我不知道如何在client.js中调用这个异步操作

奖金问题 此令牌idToken将每小时重新加载一次,因此最好每次都从SecureStore获取令牌,而不是保存一次

谢谢

接受的答案和对我有用的东西 为我工作 APISOUT的setHeader:

公认的答案是对axios收割台设置的详细钻孔。因此,如果有人直接使用axios客户端,他们可以看到其他人接受的答案,如果您是Apisoup用户,请使用库中提供的setHeader功能

干杯

您必须将您的令牌存储在可以是redux或local state的状态中。 在保存/刷新/重新加载令牌期间,您将设置HTTP客户端的头。 您可以使用下面的命令示例设置标题

export const setAuthToken = (token) => {
  apiClient.defaults.headers.common['Authorization'] = ''
  delete apiClient.defaults.headers.common['Authorization']

  if (token) {
    apiClient.defaults.headers.common['Authorization'] = `Bearer ${token}`
  }
}
调用上述函数在重新加载/刷新/创建令牌期间设置令牌

const restoreToken = async () => {
  return await authStorage.getToken("idToken").then(token =>  setAuthToken(token));
};
您必须将您的令牌存储在可以是redux或local state的状态中。 在保存/刷新/重新加载令牌期间,您将设置HTTP客户端的头。 您可以使用下面的命令示例设置标题

export const setAuthToken = (token) => {
  apiClient.defaults.headers.common['Authorization'] = ''
  delete apiClient.defaults.headers.common['Authorization']

  if (token) {
    apiClient.defaults.headers.common['Authorization'] = `Bearer ${token}`
  }
}
调用上述函数在重新加载/刷新/创建令牌期间设置令牌

const restoreToken = async () => {
  return await authStorage.getToken("idToken").then(token =>  setAuthToken(token));
};