首页 > 其他分享 >在axios中怎样添加授权验证?

在axios中怎样添加授权验证?

时间:2024-12-03 09:23:20浏览次数:7  
标签:API axios Bearer 验证 token 添加 error Authorization

在 Axios 中添加授权验证有多种方式,取决于你的后端使用的授权机制(例如,Bearer Tokens, Basic Auth, API Keys 等)。以下是一些常见方法:

1. 使用 headers 添加 Authorization 头: 这是最常用的方法,特别是对于 Bearer Tokens。

import axios from 'axios';

const token = localStorage.getItem('token'); // 获取存储的 token

axios.get('/api/user', {
  headers: {
    Authorization: `Bearer ${token}`, // 在 Authorization header 中添加 Bearer token
  }
})
.then(response => {
  // 处理响应
})
.catch(error => {
  // 处理错误
});


//  或者,创建一个 Axios 实例以全局配置授权头:

const apiClient = axios.create({
  baseURL: '/api',
  headers: {
    Authorization: `Bearer ${token}`
  }
});

apiClient.get('/user')
.then(response => {
  // 处理响应
})
.catch(error => {
  // 处理错误
});

//  更灵活的方式,允许在每个请求中覆盖全局配置:
const apiClient = axios.create({
  baseURL: '/api',
});

apiClient.get('/user', {
    headers: {
        Authorization: `Bearer ${localStorage.getItem('token')}`, // 每次请求时动态获取token
    }
})


2. 使用 auth 参数 (适用于 Basic Auth):

axios.get('/api/user', {
  auth: {
    username: 'your_username',
    password: 'your_password'
  }
})
.then(response => {
  // 处理响应
})
.catch(error => {
  // 处理错误
});

3. 使用请求拦截器 (interceptors): 拦截器可以在请求发送前修改请求配置,例如添加授权头。这对于需要在多个请求中添加相同授权信息的情况非常有用。

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
}, function (error) {
  // 处理请求错误
  return Promise.reject(error);
});


//  更灵活的请求拦截器,允许根据不同请求添加不同的授权信息:
axios.interceptors.request.use(config => {
    if (config.url === '/api/special_resource') {
        config.headers.Authorization = `ApiKey ${localStorage.getItem('apiKey')}`;
    } else {
        config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`;
    }
    return config;
}, error => Promise.reject(error));

4. 使用 params (适用于 API Keys): 如果你的 API 使用 API Key 通过查询参数进行身份验证,你可以直接在 URL 中或使用 params 选项添加它。

// 直接在 URL 中添加
axios.get('/api/user?api_key=YOUR_API_KEY')

// 使用 params 选项
axios.get('/api/user', {
  params: {
    api_key: 'YOUR_API_KEY'
  }
})

选择哪种方法取决于你的后端 API 的授权机制。 请查阅你的后端 API 文档,了解正确的授权方法和所需的参数。

刷新 Token 的处理:

如果你的应用使用需要定期刷新的 token,你可以在响应拦截器中处理 token 过期的情况:

axios.interceptors.response.use(
  response => response,
  error => {
    const originalRequest = error.config;
    if (error.response.status === 401 && !originalRequest._retry) { // 检查是否为 401 错误且未重试
      originalRequest._retry = true; // 标记已重试
      return refreshToken().then(newToken => { // 调用刷新 token 的函数
        axios.defaults.headers.common['Authorization'] = 'Bearer ' + newToken; // 更新 token
        originalRequest.headers['Authorization'] = 'Bearer ' + newToken; // 更新原始请求的 token
        return axios(originalRequest); // 重新发送请求
      });
    }
    return Promise.reject(error);
  }
);

//  refreshToken 函数示例 (你需要根据你的后端 API 实现具体的逻辑)
async function refreshToken() {
    const refreshToken = localStorage.getItem('refreshToken');

标签:API,axios,Bearer,验证,token,添加,error,Authorization
From: https://www.cnblogs.com/ai888/p/18583318

相关文章

  • 如何在PbootCMS中添加自定义的清理脚本?
    在PbootCMS中添加自定义的清理脚本,可以通过扩展控制器的方法来实现。以下是详细步骤:编辑控制器文件:打开文件 /apps/home/controller/ExtLabelController.php。找到以下代码:php //测试扩展单个标签privatefunctiontest(){$this->content=str_replace('{pboot......
  • PbootCMS 添加栏目时报错“该内容栏目编号已经存在,不能再使用”,如何解决?
    当你在PbootCMS中尝试添加新的栏目时,如果遇到“该内容栏目编号已经存在,不能再使用”的错误提示,通常是因为数据库中的栏目编号(scode)已经存在重复值。为了解决这个问题,你可以按照以下步骤操作:备份数据库:在进行任何数据库操作之前,建议先备份整个数据库,以防止意外情况导致数据丢失......
  • YOLOv11改进,YOLOv11添加SAConv可切换空洞卷积,二次创新C3k2结构
    摘要作者提出的技术结合了递归特征金字塔和可切换空洞卷积,通过强化多尺度特征学习和自适应的空洞卷积,显著提升了目标检测的效果。理论介绍空洞卷积(AtrousConvolution)是一种可以在卷积操作中插入“空洞”来扩大感受野的技术,更有效地捕捉到图像中的大范围上下文信息......
  • 4.5 将关系字段添加到模型
    在Odoo模型中添加关系字段的全面解析在Odoo开发中,模型之间的关系处理至关重要。关系字段能够有效地建立起不同模型之间的联系,使数据的组织和交互更加合理、高效。今天,我们就深入探讨如何在Odoo模型中添加关系字段。一、关系字段类型概述Odoo模型中的关系字段主要有三种类......
  • 博客园-添加统计图
    ......
  • 如何防止VX被限制添加好友?
    为了防止被微信限制添加好友,您可以采取以下措施:1.合理控制添加好友频率避免在短时间内频繁添加好友,尤其是新注册的账号,每天添加好友的数量通常不应超过20个。2.避免批量添加好友    不要一次性大量添加陌生人为好友,这可能会被系统判定为违规行为。3.提供真......
  • vscode上传已有的代码到git仓库以及解决ssh验证报错教程方法
    本文介绍了如何使用vscode推送已有的代码到git仓库方法教程,以及解决ssh验证报错的问题的方法。步骤一:新建一个仓库然后在vscode终端进入你要传的项目,使用命令初始化gitinit步骤二:输入命令绑定你在git上新建的空仓库也就是你需要上传代码的仓库,例如:gitremote......
  • 执行npm install axios 报错
    报错代码:npm:无法加载文件C:\Users\2409000014\AppData\Local\fnm_multishells\14956_1733122959640\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅https:/go.microsoft.com/fwlink/?LinkID=135170中的about_Execution_Policies。所在位置行:1字符:1+npm......
  • axios相比原生ajax的优点有哪些呢?
    Axios比原生AJAX在前端开发中有很多优势:更简洁易用的API:Axios提供了更简洁、更易于使用的API,使得发送HTTP请求更加方便。例如,设置请求头、处理响应数据等操作都更加直观。原生AJAX需要手动处理XMLHttpRequest对象的各种状态和事件,比较繁琐。Promise支持:Axi......
  • axios为什么能在浏览器中环境运行又能在node中环境运行?
    Axios之所以能在浏览器和Node.js环境中运行,是因为它使用了不同的适配器(adapters)来发送HTTP请求。它能够根据运行环境自动切换适配器。在浏览器中:Axios使用XMLHttpRequest(XHR)对象发送请求。这是浏览器内置的API,用于与服务器进行通信。在Node.js中:Axios使用http或ht......