马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- import request from "@/utils/request";
- import { AxiosPromise } from "axios";
- import { CaptchaResult, LoginData, LoginResult } from "./types";
- /**
- * 登录API
- *
- * @param data {LoginData}
- * @returns
- */
- export function loginApi(data: LoginData): AxiosPromise<LoginResult> {
- const formData = new FormData();
- formData.append("username", data.username);
- formData.append("password", data.password);
- formData.append("captchaId", data.captchaId as string);
- formData.append("captchaCode", data.captchaCode as string);
- formData.append("grant_type", "password");
- return request({
- url: "/youlai-auth/oauth2/token",
- method: "post",
- data: formData,
- headers: {
- "Content-Type": "multipart/form-data",
- Authorization: "Basic bWFsbC1hZG1pbjoxMjM0NTY=", // 客户端信息Base64明文:mall-admin:123456
- },
- });
- }
复制代码 这段代码界说了一个名为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
- import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
- import { useUserStoreHook } from "@/store/modules/user";
- // 创建 axios 实例
- const service = axios.create({
- baseURL: import.meta.env.VITE_APP_BASE_API,
- timeout: 50000,
- headers: { "Content-Type": "application/json;charset=utf-8" },
- });
- // 请求拦截器
- service.interceptors.request.use((config: InternalAxiosRequestConfig) => {
- const accessToken = localStorage.getItem("accessToken");
- if (accessToken) {
- config.headers.Authorization = accessToken;
- }
- return config;
- },
- (error: any) => {
- return Promise.reject(error);
- }
- );
- // 响应拦截器
- service.interceptors.response.use((response: AxiosResponse) => {
- const { code, msg } = response.data;
- if (code === "00000") {
- return response.data;
- }
- // 响应数据为二进制流处理(Excel导出)
- if (response.data instanceof ArrayBuffer) {
- return response;
- }
- ElMessage.error(msg || "系统出错");
- return Promise.reject(new Error(msg || "Error"));
- },
- (error: any) => {
- if (error.response.data) {
- const { code, msg } = error.response.data;
- // token 过期,重新登录
- if (code === "A0230") {
- ElMessageBox.confirm("当前页面已失效,请重新登录", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- }).then(() => {
- const userStore = useUserStoreHook();
- userStore.resetToken().then(() => {
- location.reload();
- });
- });
- } else {
- ElMessage.error(msg || "系统出错");
- }
- }
- return Promise.reject(error.message);
- }
- );
- // 导出 axios 实例
- export default service;
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |