feat(安全): 实现JWT认证和HTTPS支持
- 添加JWT认证中间件保护API端点 - 在登录流程中使用bcrypt哈希密码和JWT令牌 - 配置HTTPS服务器使用自签名证书 - 更新前端API调用以包含认证令牌
This commit is contained in:
@@ -99,6 +99,8 @@
|
||||
import { ref, onMounted, computed, watch } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
import { apiFetch } from '@/api.js'
|
||||
|
||||
const router = useRouter()
|
||||
const workers = ref([])
|
||||
const loading = ref(false)
|
||||
@@ -131,15 +133,12 @@ watch(searchQuery, () => {
|
||||
const fetchWorkers = async (page = currentPage.value) => {
|
||||
loading.value = true
|
||||
try {
|
||||
const res = await fetch(
|
||||
`${import.meta.env.VITE_API_BASE_URL}/api/managers/workers?search=${searchQuery.value}&page=${page}&limit=${pageSize.value}`,
|
||||
const data = await apiFetch(
|
||||
`/api/managers/workers?search=${searchQuery.value}&page=${page}&limit=${pageSize.value}`,
|
||||
)
|
||||
if (res.ok) {
|
||||
const data = await res.json()
|
||||
workers.value = data.workers
|
||||
totalWorkers.value = data.totalCount
|
||||
currentPage.value = page
|
||||
}
|
||||
workers.value = data.workers
|
||||
totalWorkers.value = data.totalCount
|
||||
currentPage.value = page
|
||||
} catch (err) {
|
||||
errorMessage.value = 'Failed to fetch workers.'
|
||||
console.error(err)
|
||||
@@ -159,18 +158,12 @@ const addWorker = async () => {
|
||||
loading.value = true
|
||||
errorMessage.value = ''
|
||||
try {
|
||||
const res = await fetch(`${import.meta.env.VITE_API_BASE_URL}/api/managers/workers`, {
|
||||
const data = await apiFetch('/api/managers/workers', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(newWorker.value),
|
||||
})
|
||||
const data = await res.json()
|
||||
if (res.ok) {
|
||||
await fetchWorkers(1) // Refresh list to the first page
|
||||
newWorker.value = { fullName: '', username: '', password: '' } // Clear form
|
||||
} else {
|
||||
errorMessage.value = data.message
|
||||
}
|
||||
await fetchWorkers(1) // Refresh list to the first page
|
||||
newWorker.value = { fullName: '', username: '', password: '' } // Clear form
|
||||
} catch (err) {
|
||||
errorMessage.value = 'An error occurred while adding the worker.'
|
||||
console.error(err)
|
||||
@@ -182,16 +175,14 @@ const addWorker = async () => {
|
||||
const deleteWorker = async (id) => {
|
||||
if (!confirm('Are you sure you want to delete this worker account?')) return
|
||||
try {
|
||||
const res = await fetch(`${import.meta.env.VITE_API_BASE_URL}/api/managers/workers/${id}`, {
|
||||
await apiFetch(`/api/managers/workers/${id}`, {
|
||||
method: 'DELETE',
|
||||
})
|
||||
if (res.ok) {
|
||||
// If the deleted worker was the last on the page, go to the previous page
|
||||
if (workers.value.length === 1 && currentPage.value > 1) {
|
||||
await fetchWorkers(currentPage.value - 1)
|
||||
} else {
|
||||
await fetchWorkers(currentPage.value)
|
||||
}
|
||||
// If the deleted worker was the last on the page, go to the previous page
|
||||
if (workers.value.length === 1 && currentPage.value > 1) {
|
||||
await fetchWorkers(currentPage.value - 1)
|
||||
} else {
|
||||
await fetchWorkers(currentPage.value)
|
||||
}
|
||||
} catch (err) {
|
||||
errorMessage.value = 'Failed to delete worker.'
|
||||
|
||||
Reference in New Issue
Block a user