diff --git a/apps/admin/depends.py b/apps/admin/depends.py
new file mode 100644
index 0000000..6333480
--- /dev/null
+++ b/apps/admin/depends.py
@@ -0,0 +1,15 @@
+# @Time : 2023/8/15 17:43
+# @Author : Lan
+# @File : depends.py
+# @Software: PyCharm
+from typing import Union
+
+from fastapi import Header, HTTPException
+from fastapi.requests import Request
+from core.settings import settings
+
+
+async def admin_required(authorization: Union[str, None] = Header(default=None), request: Request = None):
+ if authorization != settings.admin_token:
+ raise HTTPException(status_code=401, detail='未授权或授权校验失败')
+ return True
diff --git a/apps/admin/views.py b/apps/admin/views.py
index a762abd..22b3bb4 100644
--- a/apps/admin/views.py
+++ b/apps/admin/views.py
@@ -2,8 +2,9 @@
# @Author : Lan
# @File : views.py
# @Software: PyCharm
-from fastapi import APIRouter
+from fastapi import APIRouter, Depends
+from apps.admin.depends import admin_required
from apps.admin.pydantics import IDData
from apps.base.models import FileCodes
from core.response import APIResponse
@@ -16,7 +17,12 @@ admin_api = APIRouter(
)
-@admin_api.delete('/file/delete')
+@admin_api.post('/login', dependencies=[Depends(admin_required)])
+async def login():
+ return APIResponse()
+
+
+@admin_api.delete('/file/delete', dependencies=[Depends(admin_required)])
async def file_delete(data: IDData):
file_code = await FileCodes.get(id=data.id)
await file_storage.delete_file(file_code)
@@ -24,7 +30,7 @@ async def file_delete(data: IDData):
return APIResponse()
-@admin_api.get('/file/list')
+@admin_api.get('/file/list', dependencies=[Depends(admin_required)])
async def file_list(page: int = 1, size: int = 10):
data = await FileCodes.all().limit(size).offset((page - 1) * size)
return APIResponse(detail={
@@ -35,12 +41,12 @@ async def file_list(page: int = 1, size: int = 10):
})
-@admin_api.get('/config/get')
+@admin_api.get('/config/get', dependencies=[Depends(admin_required)])
async def get_config():
return APIResponse(detail=settings.__dict__)
-@admin_api.patch('/config/update')
+@admin_api.patch('/config/update', dependencies=[Depends(admin_required)])
async def update_config(data: dict):
for k, v in data.items():
settings.__setattr__(k, v)
diff --git a/apps/base/depends.py b/apps/base/depends.py
index e768266..324bf0f 100644
--- a/apps/base/depends.py
+++ b/apps/base/depends.py
@@ -10,10 +10,6 @@ from fastapi import Header, HTTPException, Request
from core.response import APIResponse
-async def admin_required(pwd: Union[str, None] = Header(default=None), request: Request = None):
- return False
-
-
class IPRateLimit:
def __init__(self, count, minutes):
self.ips = {}
diff --git a/core/settings.py b/core/settings.py
index 1625eef..2dc6a21 100644
--- a/core/settings.py
+++ b/core/settings.py
@@ -17,6 +17,7 @@ default_value = {
's3_secret_access_key': '',
's3_bucket_name': '',
's3_endpoint_url': '',
+ 'admin_token': 'FileCodeBox2023',
'openUpload': 1,
'uploadSize': 1024 * 1024 * 10,
'uploadMinute': 1,
diff --git a/fcb-fronted/src/stores/adminData.ts b/fcb-fronted/src/stores/adminData.ts
new file mode 100644
index 0000000..059fa0c
--- /dev/null
+++ b/fcb-fronted/src/stores/adminData.ts
@@ -0,0 +1,11 @@
+import { defineStore } from 'pinia';
+import {ref} from "vue";
+
+export const useAdminData = defineStore('adminData', () => {
+ const adminPassword = ref(localStorage.getItem('adminPassword') || '');
+ function updateAdminPwd(pwd: string) {
+ adminPassword.value = pwd;
+ localStorage.setItem('adminPassword', pwd);
+ }
+ return { adminPassword,updateAdminPwd };
+});
diff --git a/fcb-fronted/src/utils/request.ts b/fcb-fronted/src/utils/request.ts
index 92c0dbf..3d6b62f 100644
--- a/fcb-fronted/src/utils/request.ts
+++ b/fcb-fronted/src/utils/request.ts
@@ -1,15 +1,17 @@
// @ts-ignore
import axios from "axios";
import { ElMessage } from "element-plus";
-
const instance = axios.create({
baseURL: import.meta.env.DEV ? "http://localhost:12345" : "/",
timeout: 6000000,
- headers:{
- 'Authorization':localStorage.getItem('auth')
- }
});
-// 对响应进行拦截
+instance.interceptors.request.use(
+ (config: any) => {
+ config.headers= {
+ 'Authorization': localStorage.getItem('adminPassword') || '',
+ }
+ return config;
+ });
instance.interceptors.response.use(
(response:any) => {
if (response.data.code === 200) {
diff --git a/fcb-fronted/src/views/Admin/AdminView.vue b/fcb-fronted/src/views/Admin/AdminView.vue
index 04cb03d..d7377f0 100644
--- a/fcb-fronted/src/views/Admin/AdminView.vue
+++ b/fcb-fronted/src/views/Admin/AdminView.vue
@@ -1,5 +1,5 @@
-
+
{{menu.name}}
@@ -10,13 +10,32 @@
+
+
+
+
+ 登录
+
+
+
+
\ No newline at end of file
diff --git a/fcb-fronted/src/views/Admin/SettingView.vue b/fcb-fronted/src/views/Admin/SettingView.vue
index 2afc252..34b579b 100644
--- a/fcb-fronted/src/views/Admin/SettingView.vue
+++ b/fcb-fronted/src/views/Admin/SettingView.vue
@@ -9,6 +9,9 @@
+
+
+
Bit
@@ -80,6 +83,7 @@ const config = ref({
name: '',
description: '',
file_storage: '',
+ admin_token: '',
keywords: '',
openUpload: 1,
uploadSize: 1,