fix: 认证系统、登录兼容性、运行时配置、钉钉通知及代码清理
- 实现 JWT 认证中间件,保护配置管理和任务删除接口 - 修复 ConfigView 登录按钮(Vue 3 inject 替代 $root) - 页面刷新时通过 /api/auth/me 校验 token 有效性 - max_concurrent_builds 修改后运行时即时生效 - 实现钉钉 webhook 通知(构建成功/失败自动推送) - 删除未使用的 useWebSocket composable - log_streamer 使用 LOG_QUEUE_MAX_SIZE 配置常量
This commit is contained in:
+33
-5
@@ -41,12 +41,22 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ref, onMounted, provide } from 'vue'
|
||||
|
||||
const isLoggedIn = ref(false)
|
||||
const showLogin = ref(false)
|
||||
const loginForm = ref({ username: '', password: '' })
|
||||
|
||||
// 提供给子组件使用
|
||||
provide('showLogin', showLogin)
|
||||
provide('isLoggedIn', isLoggedIn)
|
||||
|
||||
// 获取存储的 token
|
||||
const getToken = () => localStorage.getItem('authToken') || ''
|
||||
|
||||
// 对外暴露 token 获取方法,供 API 请求使用
|
||||
provide('getToken', getToken)
|
||||
|
||||
const login = async () => {
|
||||
try {
|
||||
const res = await fetch('/api/auth/login', {
|
||||
@@ -55,8 +65,10 @@ const login = async () => {
|
||||
body: JSON.stringify(loginForm.value),
|
||||
})
|
||||
if (res.ok) {
|
||||
const data = await res.json()
|
||||
isLoggedIn.value = true
|
||||
showLogin.value = false
|
||||
localStorage.setItem('authToken', data.token)
|
||||
localStorage.setItem('isAdmin', 'true')
|
||||
} else {
|
||||
alert('用户名或密码错误')
|
||||
@@ -68,13 +80,29 @@ const login = async () => {
|
||||
|
||||
const logout = () => {
|
||||
isLoggedIn.value = false
|
||||
localStorage.removeItem('authToken')
|
||||
localStorage.removeItem('isAdmin')
|
||||
}
|
||||
|
||||
// 检查登录状态
|
||||
if (localStorage.getItem('isAdmin') === 'true') {
|
||||
isLoggedIn.value = true
|
||||
}
|
||||
// 检查登录状态(验证 token 有效性)
|
||||
onMounted(async () => {
|
||||
const token = localStorage.getItem('authToken')
|
||||
if (!token) return
|
||||
try {
|
||||
const res = await fetch('/api/auth/me', {
|
||||
headers: { 'Authorization': `Bearer ${token}` },
|
||||
})
|
||||
if (res.ok) {
|
||||
isLoggedIn.value = true
|
||||
} else {
|
||||
// token 无效或过期,清除
|
||||
localStorage.removeItem('authToken')
|
||||
localStorage.removeItem('isAdmin')
|
||||
}
|
||||
} catch {
|
||||
// 网络错误时不清除,保持登录状态
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
Reference in New Issue
Block a user