开源项目低代码表单FormCreate重写内置的请求方法,实现中间件和附带token ...

打印 上一主题 下一主题

主题 854|帖子 854|积分 2562

低代码表单FormCreate中为了确保全部的接口请求都包含认证 Token,您可以重写内置的请求方法,并在请求前动态地设置 Token。这不仅确保了请求的安全性,也使得 Token 的管理更加会合和同等。
源码地址: Github | Gitee | 资助文档
重写内置请求方法并设置 Token

您可以自定义 formCreate.fetch 方法,以便在每次请求时主动附加 Token
  1. formCreate.fetch = (options) => {
  2.     // 获取或生成 Token
  3.     const token = 'your-auth-token'; // 这里的 token 可以从 Vuex、localStorage 或其他地方获取
  4. // 设置请求头,附加 Authorization token
  5.     const headers = {
  6.         ...options.headers,
  7.         Authorization: `Bearer ${token}`,
  8.     };
  9. // 发起请求
  10.     fetch(options.action, {
  11.         method: options.method || 'GET', // 默认请求方法为 GET
  12.         headers: headers,                 // 包含 Authorization 的请求头
  13.         body: options.method !== 'GET' ? JSON.stringify(options.data) : null, // 如果是 POST 或其他方法,添加请求体
  14.     })
  15.     .then(response => response.json())  // 解析响应为 JSON
  16.     .then(data => {
  17.         if (options.onSuccess) {
  18.             options.onSuccess(data);  // 成功回调
  19.         }
  20.     })
  21.     .catch(error => {
  22.         if (options.onError) {
  23.             options.onError(error);  // 失败回调
  24.         }
  25.     });
  26. };
复制代码
在请求前设置 Token

通过 beforeFetch 钩子,您可以在每次请求发送前设置 Token。以下是如何在 Vue 组件中利用这个钩子:
  1. <template>
  2.     <form-create :rule="rule" v-model:api="fApi" :option="options" />
  3. </template>
  4. <script setup>
  5.     import { ref } from 'vue';
  6.     const fApi = ref({});
  7.     const options = {
  8.         // 在请求发送前的钩子
  9.         beforeFetch: (options) => {
  10.             // 动态设置请求头中的 Authorization token
  11.             const token = 'your-auth-token'; // 这里的 token 可以从任何存储中获取
  12.             options.headers = {
  13.                 Authorization: `Bearer ${token}`
  14.             };
  15.         }
  16.     };
  17.     const rule = [
  18.         {
  19.             type: 'select',
  20.             field: 'product',
  21.             title: '选择产品',
  22.             fetch: {
  23.                 action: '/api/products',
  24.                 to: 'options',
  25.                 parse: (res) => res.data.map(product => ({ label: product.name, value: product.id })),
  26.                 onError: (error) => console.error('加载产品数据失败:', error),
  27.             },
  28.         }
  29.     ];
  30. </script>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表