当前位置: 首页 > 知识库问答 >
问题:

无法从使用授权的axios的API获得响应

贺飞星
2023-03-14

我试图从服务器上拉取一个食谱列表,该服务器期望从本地存储获得授权令牌。我创建了一个本地axiosAnd Auth文件,因为我将从API中访问多个endpoint。我的授权文件看起来像这样...

 import axios from 'axios';

const axiosWithAuth = () => {
  const token = localStorage.getItem('token');

  return axios.create({
    baseURL: 'https://secret-fam-recipes.herokuapp.com/api',
    headers: { Authorization: token }
  });
};

export default axiosWithAuth

然后,我将此axios调用与Redux操作一起使用,以便返回的数据更新项目的存储。我尝试过用两种不同的方式调用API。一个异步等待,看起来像这样。。。

export const listRecipes = () => async (dispatch) => {
    dispatch({type: actions.FETCH_RECIPES_REQUEST});
    try {
        const {recipes} = await axiosWithAuth.get("/recipes")
        console.log("recipes", recipes)
        dispatch({type: actions.FETCH_RECIPES_SUCCESS, payload: recipes})
    } catch(error) {
        dispatch({type: actions.FETCH_RECIPES_FAILURE,
            payload:
                error.resposne && error.response.message
                ? error.response.message
                : error.message
            })
    }
}

另一个没有异步等待,看起来像这样。。。

export const listRecipes = () => (dispatch) => {
    dispatch({type: actions.FETCH_RECIPES_REQUEST});
    axiosWithAuth.get("/recipes")
    .then(data => {
        return dispatch({type: actions.FETCH_RECIPES_SUCCESS, payload: data})
    })
    .catch(error => {
        dispatch({type: actions.FETCH_RECIPES_FAILURE,
            payload:
                error.resposne && error.response.message
                ? error.response.message
                : error.message
            })
    })
}

我也像这样导入了我的依赖项。。。

import axiosWithAuth from "../utils/axiosWithAuth";
import * as actions from "../constants/recipeConstants";

当我尝试异步等待操作时,服务器会返回500个错误。当我使用非异步等待操作时,我得到一个类型错误,当我试图加载页面时,说以下内容。.

TypeError: _utils_axiosWithAuth__WEBPACK_IMPORTED_MODULE_0__.default.get is not a function

很明显,我的操作或axiosWithAuth格式有问题。我已尝试将axiosWithAuth函数更改为使用auth关键字而不是标题,但它仍然无法工作。我不确定我的行为是否写得不正确,或者是否有其他东西我应该看看。任何帮助都将不胜感激。非常感谢。

共有2个答案

顾磊
2023-03-14

更简单的方法是不从自定义axios返回函数,而是返回实际的axios实例。因为你只是设置一个标题,你可以这样做:

import axios from 'axios';

const axiosInstance = axios.create({
    baseURL: 'https://secret-fam-recipes.herokuapp.com/api'
});

axiosInstance.interceptors.request.use((config) => {
      config.headers['Authorization'] = localStorage.getItem('token');
      return config;
});

export default axiosInstance;

然后,只需导入并使用axios实例:

import axios from './custom-axios';

axios.get('/url-here');

陈哲
2023-03-14

axiosAnd Auth是一个函数,所以我应该在我的操作中调用这个函数。正确的线是

const {recipes} = await axiosWithAuth().get("/recipes")
 类似资料:
  • 我正在创建一个电子学习网站,那里有你可以选择的课程卡片。这是我的密码 课程ist.vue 我的问题是我无法从API链接获取数据- 我想知道我做错了什么。我也尝试使用{{list}}来获取数据,但没有成功。我现在的目标是得到所有的数据,即使它看起来很乱。抱歉我英语不好,谢谢你!

  • 为了请求访问令牌,客户端从资源所有者获得授权。授权表现为授权许可的形式,客户端用它请求访问令牌。OAuth定义了四种许可类型:授权码、隐式许可、资源所有者密码凭据和客户端凭据。它还提供了扩展机制定义其他许可类型。

  • 我在springboot springSecurity oauth2中有一个项目,该项目工作正常。我想在这个项目中添加KeyClope。我想在我的项目中授权用户,并从KeyClope获得。这可能吗?

  • API使用步骤 成为目睹云认证用户 登录控制台https://www.wenjiangs.com/doc/QSfBOXSPconsole/, 进入系统管理下的TOKEN管理。 使用第二步中得到的TOKEN,便可以访问目睹云API中的全部接口服务,如果请求没有带上TOKEN,目睹云API的安全机制将会视其为未授权访问操作,并将其拦截。 API域名 https://www.muducloud.com

  • 我在.NET Core中设置了一个简单的API,使用Identity Server4编排的JWT保护它。当我访问一个属性为[Authorize]的endpoint时,我得到了预期的响应(401未授权)。注释掉后,它返回实际数据,正如所支持的那样。 现在,当添加具有密钥授权和值载体XXX的头(其中XXX是我获得的令牌)时,我会立即得到一条错误消息 无法得到任何响应 接下来是关于该怎么做的四点建议。我

  • 我使用隐式授权流将Spotify API与AngularJS结合使用,但我不能使用access_token。 我以这种方式实现了隐性拨款流: 当我上网址时,我被很好地重定向到Spotify认证,但当我连接时,浏览器进入重定向循环:Spotify将我重定向到localhost/~mathieu这将我重定向到Spotify等… 我想在Spotify重定向我之后,我的脚本无法获取令牌,所以我再次被重定向