🎨 优化登陆验证逻辑

This commit is contained in:
2026-03-13 21:50:26 +08:00
parent 16116a841d
commit cec46cabbe
4 changed files with 35 additions and 8 deletions

View File

@@ -57,6 +57,7 @@ func Routers() *gin.Engine {
systemRouter := router.RouterGroupApp.System systemRouter := router.RouterGroupApp.System
exampleRouter := router.RouterGroupApp.Example exampleRouter := router.RouterGroupApp.Example
appRouter := router.RouterGroupApp.App // 前台应用路由
// 如果想要不使用nginx代理前端网页可以修改 web/.env.production 下的 // 如果想要不使用nginx代理前端网页可以修改 web/.env.production 下的
// VUE_APP_BASE_API = / // VUE_APP_BASE_API = /
// VUE_APP_BASE_PATH = http://localhost // VUE_APP_BASE_PATH = http://localhost
@@ -67,9 +68,9 @@ func Routers() *gin.Engine {
Router.StaticFS(global.GVA_CONFIG.Local.StorePath, justFilesFilesystem{http.Dir(global.GVA_CONFIG.Local.StorePath)}) // Router.Use(middleware.LoadTls()) // 如果需要使用https 请打开此中间件 然后前往 core/server.go 将启动模式 更变为 Router.RunTLS("端口","你的cre/pem文件","你的key文件") Router.StaticFS(global.GVA_CONFIG.Local.StorePath, justFilesFilesystem{http.Dir(global.GVA_CONFIG.Local.StorePath)}) // Router.Use(middleware.LoadTls()) // 如果需要使用https 请打开此中间件 然后前往 core/server.go 将启动模式 更变为 Router.RunTLS("端口","你的cre/pem文件","你的key文件")
// 跨域,如需跨域可以打开下面的注释 // 跨域,如需跨域可以打开下面的注释
// Router.Use(middleware.Cors()) // 直接放行全部跨域请求 Router.Use(middleware.Cors()) // 直接放行全部跨域请求
// Router.Use(middleware.CorsByRules()) // 按照配置的规则放行跨域请求 //Router.Use(middleware.CorsByRules()) // 按照配置的规则放行跨域请求
// global.GVA_LOG.Info("use middleware cors") global.GVA_LOG.Info("use middleware cors")
docs.SwaggerInfo.BasePath = global.GVA_CONFIG.System.RouterPrefix docs.SwaggerInfo.BasePath = global.GVA_CONFIG.System.RouterPrefix
Router.GET(global.GVA_CONFIG.System.RouterPrefix+"/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) Router.GET(global.GVA_CONFIG.System.RouterPrefix+"/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
global.GVA_LOG.Info("register swagger handler") global.GVA_LOG.Info("register swagger handler")
@@ -117,6 +118,18 @@ func Routers() *gin.Engine {
exampleRouter.InitAttachmentCategoryRouterRouter(PrivateGroup) // 文件上传下载分类 exampleRouter.InitAttachmentCategoryRouterRouter(PrivateGroup) // 文件上传下载分类
} }
// 前台应用路由(新增)
{
appGroup := PublicGroup.Group("app") // 统一使用 /app 前缀
appRouter.InitAuthRouter(appGroup) // 认证路由:/app/auth/* 和 /app/user/*
appRouter.InitCharacterRouter(appGroup) // 角色卡路由:/app/character/*
appRouter.InitConversationRouter(appGroup) // 对话路由:/app/conversation/*
appRouter.InitAIConfigRouter(appGroup) // AI配置路由/app/ai-config/*
appRouter.InitPresetRouter(appGroup) // 预设路由:/app/preset/*
appRouter.InitUploadRouter(appGroup) // 上传路由:/app/upload/*
appRouter.InitWorldbookRouter(appGroup) // 世界书路由:/app/worldbook/*
appRouter.InitRegexScriptRouter(appGroup) // 正则脚本路由:/app/regex/*
}
//插件路由安装 //插件路由安装
InstallPlugin(PrivateGroup, PublicGroup, Router) InstallPlugin(PrivateGroup, PublicGroup, Router)

View File

@@ -1 +1 @@
VITE_API_BASE_URL=http://localhost:8888 VITE_API_BASE_URL=http://192.168.100.160:8888

View File

@@ -1,5 +1,12 @@
import apiClient from './client' import apiClient from './client'
// 通用响应结构
export interface ApiResponse<T> {
code: number
data: T
msg: string
}
// 类型定义 // 类型定义
export interface RegisterRequest { export interface RegisterRequest {
username: string username: string
@@ -61,12 +68,12 @@ export const authApi = {
}, },
// 用户登录 // 用户登录
login: (data: LoginRequest): Promise<{ data: LoginResponse }> => { login: (data: LoginRequest): Promise<ApiResponse<LoginResponse>> => {
return apiClient.post('/app/auth/login', data) return apiClient.post('/app/auth/login', data)
}, },
// 刷新 Token // 刷新 Token
refreshToken: (refreshToken: string): Promise<{ data: LoginResponse }> => { refreshToken: (refreshToken: string): Promise<ApiResponse<LoginResponse>> => {
return apiClient.post('/app/auth/refresh', { refreshToken }) return apiClient.post('/app/auth/refresh', { refreshToken })
}, },
@@ -76,7 +83,7 @@ export const authApi = {
}, },
// 获取用户信息 // 获取用户信息
getUserInfo: (): Promise<{ data: User }> => { getUserInfo: (): Promise<ApiResponse<User>> => {
return apiClient.get('/app/auth/userinfo') return apiClient.get('/app/auth/userinfo')
}, },

View File

@@ -18,6 +18,12 @@ export default function LoginPage() {
try { try {
const response = await authApi.login({ username, password }) const response = await authApi.login({ username, password })
// 检查业务 code只有 code === 0 才视为登录成功
if (!response || response.code !== 0 || !response.data) {
throw new Error(response?.msg || '用户名或密码错误')
}
const { token, refreshToken, user } = response.data const { token, refreshToken, user } = response.data
localStorage.setItem('token', token) localStorage.setItem('token', token)
@@ -26,7 +32,8 @@ export default function LoginPage() {
navigate('/profile') navigate('/profile')
} catch (err: any) { } catch (err: any) {
setError(err || '登录失败,请检查用户名和密码') const message = err?.message || err || '登录失败,请检查用户名和密码'
setError(message)
} finally { } finally {
setLoading(false) setLoading(false)
} }