loginApi

[复制链接]
发表于 2026-2-11 15:38:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. import request from "@/utils/request";
  2. import { AxiosPromise } from "axios";
  3. import { CaptchaResult, LoginData, LoginResult } from "./types";
  4. /**
  5. * 登录API
  6. *
  7. * @param data {LoginData}
  8. * @returns
  9. */
  10. export function loginApi(data: LoginData): AxiosPromise<LoginResult> {
  11.   const formData = new FormData();
  12.   formData.append("username", data.username);
  13.   formData.append("password", data.password);
  14.   formData.append("captchaId", data.captchaId as string);
  15.   formData.append("captchaCode", data.captchaCode as string);
  16.   formData.append("grant_type", "password");
  17.   return request({
  18.     url: "/youlai-auth/oauth2/token",
  19.     method: "post",
  20.     data: formData,
  21.     headers: {
  22.       "Content-Type": "multipart/form-data",
  23.       Authorization: "Basic bWFsbC1hZG1pbjoxMjM0NTY=", // 客户端信息Base64明文:mall-admin:123456
  24.     },
  25.   });
  26. }
复制代码
这段代码界说了一个名为loginApi的函数,它用于处理处罚用户登录的API哀求。函数吸取一个LoginData范例的参数data,并返回一个AxiosPromise<LoginResult>范例的对象。下面是详细的表明:

  • import request from "@/utils/request";:这行代码从@/utils/request模块中导入了一个名为request的函数。这个函数大概是用来发送HTTP哀求的工具函数。
  • import { AxiosPromise } from "axios";:从axios库中导入了AxiosPromise范例,这是用来体现一个返回值是AxiosPromise范例的函数的返回值范例。
  • import { CaptchaResult, LoginData, LoginResult } from "./types";:从当前目次下的types模块中导入了三个范例:CaptchaResult、LoginData和LoginResult。这些范例大概用于范例查抄,以确保传入的数据和返回的效果符合预期的格式。
  • export function loginApi(data: LoginData): AxiosPromise<LoginResult> { ... }:界说了一个名为loginApi的导出函数,它吸取一个LoginData范例的参数data,并返回一个AxiosPromise<LoginResult>范例的对象。
  • 在函数体内部,起首创建了一个FormData对象:const formData = new FormData();。FormData是一个用于构建表单数据的类,可以方便地添加键值对。
  • 接下来,使用formData.append(key, value)方法向formData对象中添加了四个键值对,分别是用户名、暗码、验证码ID和验证码代码。这些数据是从传入的data参数中获取的。
  • formData.append("grant_type", "password");:向表单数据中添加了一个固定的键值对,键为"grant_type",值为"password"。这表明登录授权范例是暗码范例。
  • return request({ ... });:末了,函数通过调用之前导入的request函数发起一个POST哀求到URL"/youlai-auth/oauth2/token"。哀求的方法是"post",哀求体是之前构建的表单数据formData。同时设置了哀求头,此中包罗了内容范例为多部分表单数据("Content-Type": "multipart/form-data")和底子认证信息(Authorization: "Basic bWFsbC1hZG1pbjoxMjM0NTY=")。这里的认证信息是一个Base64编码的字符串,解码后是客户端ID和密钥的组合,比方:“mall-admin:123456”。
总结来说,loginApi函数用于通过POST哀求发送用户的登录信息(包罗用户名、暗码、验证码等),并返回一个包罗登录效果的Promise对象。
request.ts
  1. import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
  2. import { useUserStoreHook } from "@/store/modules/user";
  3. // 创建 axios 实例
  4. const service = axios.create({
  5.   baseURL: import.meta.env.VITE_APP_BASE_API,
  6.   timeout: 50000,
  7.   headers: { "Content-Type": "application/json;charset=utf-8" },
  8. });
  9. // 请求拦截器
  10. service.interceptors.request.use((config: InternalAxiosRequestConfig) => {
  11.     const accessToken = localStorage.getItem("accessToken");
  12.     if (accessToken) {
  13.       config.headers.Authorization = accessToken;
  14.     }
  15.     return config;
  16.   },
  17.   (error: any) => {
  18.     return Promise.reject(error);
  19.   }
  20. );
  21. // 响应拦截器
  22. service.interceptors.response.use((response: AxiosResponse) => {
  23.     const { code, msg } = response.data;
  24.     if (code === "00000") {
  25.       return response.data;
  26.     }
  27.     // 响应数据为二进制流处理(Excel导出)
  28.     if (response.data instanceof ArrayBuffer) {
  29.       return response;
  30.     }
  31.     ElMessage.error(msg || "系统出错");
  32.     return Promise.reject(new Error(msg || "Error"));
  33.   },
  34.   (error: any) => {
  35.     if (error.response.data) {
  36.       const { code, msg } = error.response.data;
  37.       // token 过期,重新登录
  38.       if (code === "A0230") {
  39.         ElMessageBox.confirm("当前页面已失效,请重新登录", "提示", {
  40.           confirmButtonText: "确定",
  41.           cancelButtonText: "取消",
  42.           type: "warning",
  43.         }).then(() => {
  44.           const userStore = useUserStoreHook();
  45.           userStore.resetToken().then(() => {
  46.             location.reload();
  47.           });
  48.         });
  49.       } else {
  50.         ElMessage.error(msg || "系统出错");
  51.       }
  52.     }
  53.     return Promise.reject(error.message);
  54.   }
  55. );
  56. // 导出 axios 实例
  57. export default service;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表