通过用户中心来登录

This commit is contained in:
junleea 2025-05-24 20:16:47 +08:00
parent 6a6c5c53fb
commit f1063be9ad
7 changed files with 194 additions and 27 deletions

View File

@ -1,4 +1,5 @@
import request from '@/utils/request2'; import request from '@/utils/user_center_request';
import request2 from '@/utils/request2';
import md5 from 'js-md5'; import md5 from 'js-md5';
import {UserUISettings} from '@/types/user'; import {UserUISettings} from '@/types/user';
@ -141,7 +142,7 @@ export const GetUserStatisticService = (Data) => {
for (let key in Data) { for (let key in Data) {
params.append(key, Data[key]) params.append(key, Data[key])
} }
return request.post('/user/statistic', params,{ return request2.post('/user/statistic', params,{
headers: { headers: {
'token': Data.token, 'token': Data.token,
} }

View File

@ -99,3 +99,19 @@ export interface UserUISettings {
session_id: number; // 会话ID session_id: number; // 会话ID
}; };
} }
// {
// "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDgwODg2MDIsImlkIjoxLCJ0eXBlIjoiYWNjZXNzIiwidXNlcm5hbWUiOiJsaWp1biJ9.HJDV_GLkHCEh77GU1tEExmq1RBVv_mYwfQAUEdIFoKw",
// "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDg2ODk4MDIsImlkIjoxLCJ0eXBlIjoicmVmcmVzaCJ9.bDO7a7KLNmI9-EVkVmcEebRVD0-5p-Uq7sThRd-NFqA",
// "user_id": 1,
// "username": "lijun",
// "email": "lijun@ljsea.top"
// },
export interface UserToken {
access_token: string; // 访问令牌
refresh_token: string; // 刷新令牌
user_id: number; // 用户ID
username: string; // 用户名
email: string; // 用户邮箱
}

View File

@ -22,11 +22,6 @@ request.interceptors.response.use(
router.push("/login") router.push("/login")
return return
} }
if(result.data.code == 7){
//alert("该用户已存在,请重新输入!");
ElMessage.error('该用户已存在,请重新输入!');
return null
}
if(result.data.code == 1){ if(result.data.code == 1){
//alert("请求失败,请稍后重试!"); //alert("请求失败,请稍后重试!");

View File

@ -0,0 +1,74 @@
// request.ts
import { ElMessage } from 'element-plus'
import router from '@/router/index.js'
const baseURL = "https://uc.ljsea.top/"
// 统一错误处理
const errorHandler = (msg: string = '请求失败,请稍后重试!') => {
ElMessage.error(msg)
return Promise.reject(new Error(msg))
}
// 核心请求方法
const fetchRequest = async (url: string, config?: RequestInit) => {
try {
const fullUrl = new URL(url, baseURL).toString()
const response = await fetch(fullUrl, {
...config,
//credentials: 'include', // 携带 Cookie
headers: {
'Content-Type': 'application/json',
...config?.headers,
},
})
// HTTP 状态码处理
if (!response.ok) {
router.push("/login")
return errorHandler(`HTTP 错误 ${response.status}`)
}
// 业务数据处理
const result = await response.json()
if (result.message === "NOT_LOGIN" || [2, 3, 4].includes(result.code)) {
ElMessage.error('登录失效,请重新登录!')
localStorage.removeItem("token")
router.push("/login")
return Promise.reject(result)
}
if (result.code === 1) {
return errorHandler(result.message || '请求失败,请稍后重试!')
}
return result.data || result
} catch (error) {
return errorHandler(error instanceof Error ? error.message : '网络连接异常')
}
}
// 封装不同请求方法
export default {
get: (url: string, config?: RequestInit) =>
fetchRequest(url, { ...config, method: 'GET' }),
post: (url: string, data?: any, config?: RequestInit) =>
fetchRequest(url, {
...config,
method: 'POST',
body: JSON.stringify(data),
}),
put: (url: string, data?: any, config?: RequestInit) =>
fetchRequest(url, {
...config,
method: 'PUT',
body: JSON.stringify(data),
}),
delete: (url: string, config?: RequestInit) =>
fetchRequest(url, { ...config, method: 'DELETE' }),
}

View File

@ -0,0 +1,76 @@
import axios from "axios";
import router from "@/router/index.js";
import Cookies from 'js-cookie';
import { ElMessage } from 'element-plus';
//const baseURL = "https://gep.ljsea.top/";
const baseURL = "https://uc.ljsea.top/";
//const baseURL= "http://localhost:8084";
//const baseURL="https://pm.ljsea.top";
//const baseURL = "https://gep.ljsea.xyz/";
const request = axios.create({
baseURL: baseURL,
});
request.interceptors.response.use(
result => {
const cookie= Cookies.get("user_token");
console.log("cookie:", cookie);
//请求地址
if(result.config.url == "/user/refresh_token"){
return result;
}
if(result.data.message==="NOT_LOGIN"|| [2, 3, 4].includes(result.data.code) || result.status !== 200 ){
//alert("登录失效,请重新登录!")
refreshToken();
//重新请求
//return request(result.config);
}
if(result.data.code == 7){
//alert("该用户已存在,请重新输入!");
ElMessage.error('该用户已存在,请重新输入!');
return null
}
if(result.data.code == 1){
//alert("请求失败,请稍后重试!");
ElMessage.error('请求失败,请稍后重试!');
}else{
return result.data
}
},
error => {
//alert("请求失败,请稍后重试!");
ElMessage.error('请求失败,请稍后重试!');
return Promise.reject(error);
}
)
const refreshToken = async () => {
//读取cookie的信息
const user_token = Cookies.get("user_token");
if(user_token == null){
router.push("/login");
}
let userTokenInfo = JSON.parse(user_token);
let req_data = await request.post('/user/refresh_token', {
"refresh_token": userTokenInfo.refresh_token
}, {
headers: {
'token': userTokenInfo.token,
'Content-Type': 'application/json' // 设置请求头为 JSON 格式
}
});
if(req_data.status == 401 || req_data.status == 403){
//alert("登录失效,请重新登录!");
ElMessage.error('登录失效,请重新登录!');
localStorage.removeItem("token");
router.push("/login")
}else{
let newAccessToken = req_data.data;
localStorage.setItem("token", newAccessToken);
}
}
export default request;

View File

@ -79,7 +79,9 @@ import { useRouter } from "vue-router";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { loginService } from "@/api/user"; import { loginService } from "@/api/user";
import { GetUserInfoService } from "@/api/user"; import { GetUserInfoService } from "@/api/user";
import { UserToken } from "@/types/user";
import { usePermissStore } from "@/store/permiss"; import { usePermissStore } from "@/store/permiss";
import Cookies from 'js-cookie';
import {getThirdPartyUUID,getThirdPartyLoginStatus,getGithubLoginUrl,getQQLoginUrl,getThirdPartyLoginUrl} from "@/api/user"; import {getThirdPartyUUID,getThirdPartyLoginStatus,getGithubLoginUrl,getQQLoginUrl,getThirdPartyLoginUrl} from "@/api/user";
// //
const lgStr = localStorage.getItem("login-param"); const lgStr = localStorage.getItem("login-param");
@ -236,20 +238,15 @@ const thirdLogin = async (type) => {
if(status["status"] === 0) { if(status["status"] === 0) {
// //
clearInterval(timer); clearInterval(timer);
let userInfo = status["user_info"]; let userInfo:UserToken = status["user_info"];
let token = userInfo["token"]; globalData["token"] = userInfo.access_token;
if (!token) { localStorage.setItem("token", userInfo.access_token);
ElMessage.error("获取登录状态失败!请稍后再试"); localStorage.setItem("refresh_token", userInfo.refresh_token);
return; localStorage.setItem("userId", userInfo.user_id.toString());
} localStorage.setItem("username", userInfo.username);
globalData["token"] = token;
localStorage.setItem("token", token);
localStorage.setItem("userId", userInfo["id"]);
localStorage.setItem("username", status["username"]);
let now = new Date(); let now = new Date();
localStorage.setItem("end_time", (now.setDate(now.getHours() + 12)).toString()); // localStorage.setItem("end_time", (now.setDate(now.getHours() + 12)).toString()); //
await getMyUserInfo(userInfo["id"]); await getMyUserInfo(userInfo.user_id);
return; return;
} }
}, 2000); }, 2000);
@ -282,13 +279,15 @@ const onLogin = async () => {
ElMessage.error("登录失败!用户名或密码错误"); ElMessage.error("登录失败!用户名或密码错误");
return; return;
} }
let userTokenInfo: UserToken = result["data"];
globalData["token"] = result.data; globalData["token"] = result.data;
localStorage.setItem("token", result.data.token); localStorage.setItem("token", userTokenInfo.access_token);
localStorage.setItem("userId", result.data.id); localStorage.setItem("refresh_token", userTokenInfo.refresh_token);
localStorage.setItem("username", result.data.username); localStorage.setItem("userId", userTokenInfo.user_id.toString());
localStorage.setItem("username", userTokenInfo.username);
let now = new Date(); let now = new Date();
localStorage.setItem("end_time", (now.setDate(now.getHours() + 12)).toString()); // localStorage.setItem("end_time", (now.setDate(now.getHours())).toString()); //
await getMyUserInfo(result.data.id); await getMyUserInfo(userTokenInfo.user_id);
//token.value= result.data; //token.value= result.data;
}; };
@ -301,6 +300,8 @@ const getMyUserInfo = async (id) => {
id: id, id: id,
}; };
result = await GetUserInfoService(tokenData); result = await GetUserInfoService(tokenData);
const cookie= Cookies.get("user_token");
console.log("cookie:", cookie);
if (result["code"] === 0) { if (result["code"] === 0) {
//console.log("token data:",this.tokenData) //console.log("token data:",this.tokenData)
// localStorage.setItem("video_func", result.data.VideoFunc); // localStorage.setItem("video_func", result.data.VideoFunc);
@ -308,6 +309,7 @@ const getMyUserInfo = async (id) => {
// localStorage.setItem("cid_func", result.data.CIDFunc); // localStorage.setItem("cid_func", result.data.CIDFunc);
// localStorage.setItem("role", result.data.Role); // localStorage.setItem("role", result.data.Role);
ElMessage.success("登录成功"); ElMessage.success("登录成功");
localStorage.setItem("ms_username", result["data"]["Name"]); localStorage.setItem("ms_username", result["data"]["Name"]);
const keys = const keys =

View File

@ -64,6 +64,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive,inject } from 'vue'; import { ref, reactive,inject } from 'vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { UserToken } from "@/types/user";
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import { registerService,getRigisterEmailCode } from "@/api/user"; import { registerService,getRigisterEmailCode } from "@/api/user";
import {GetUserInfoService} from "@/api/user"; import {GetUserInfoService} from "@/api/user";
@ -156,10 +157,12 @@ const onRegister = async () => {
let result = await registerService(registerData); let result = await registerService(registerData);
if (result !== null) { if (result !== null) {
let userTokenInfo: UserToken = result["data"];
globalData["token"] = result.data; globalData["token"] = result.data;
localStorage.setItem("token", result.data.token); localStorage.setItem("token", userTokenInfo.access_token);
localStorage.setItem("userId", result.data.id); localStorage.setItem("refresh_token", userTokenInfo.refresh_token);
localStorage.setItem("username", result.data.username); localStorage.setItem("userId", userTokenInfo.user_id.toString());
localStorage.setItem("username", userTokenInfo.username);
let now = new Date(); let now = new Date();
localStorage.setItem("end_time", (now.setDate(now.getHours() + 12)).toString()); // localStorage.setItem("end_time", (now.setDate(now.getHours() + 12)).toString()); //
//token.value= result.data; //token.value= result.data;