在创建API的过程中,通常API接口是没有做任何验证的,这样就有可能出现可能的安全问题,不是什么特别重要的接口,故使用字段验证
注意:这种方式只是对于不重要的接口做验证,如果比较重要,建议使用oAuth2.0认证完整流程
代码如下:
import time
from typing import Union
from fastapi import FastAPI, Depends, HTTPException, Header
from zoho_select import zohoselect
from pydantic import BaseModel
from didamian import *
from crmsql import *
from Universal import *
from emailsend import Email
d = di()
z = zohoselect()
app = FastAPI()
class Item(BaseModel):
iid: str
area: str
name: str
source: str
owner: str
column:str
desc:str
class Event(BaseModel):
Eventid :str
Eventtitle :str
Eventcount :str
whatid : str
over :str
class Project_Management(BaseModel):
iid :str
title :str
dep :str
Owner :str
st :str
def authenticate(token: str = Header(...)):
# 检查传递的 token 是否符合预期的值
if token != "66467345678999876456746":
raise HTTPException(status_code=401,detail=None)
@app.get("/test")
def read_root(token: str = Depends(authenticate)):
return {"Hello": "World"}
我们在authenticate方法中定义一个token字段,指明在Header里面,并在get方法路径中指明需要这个必填字段,故发送过来的请求必须有taoken字段,且值必须正确。在authenticate方法中自行定义token的值
if token != "66467345678999876456746":
post或者其他方法一样,如法炮制就行,
请求正常返回:
{
"Hello": "World"
}
请求字段值错误返回:
{
"detail": "Unauthorized"
}
请求头中未包含必填字段返回:
{
"detail": [
{
"type": "missing",
"loc": [
"header",
"token"
],
"msg": "Field required",
"input": null,
"url": "https://errors.pydantic.dev/2.2/v/missing"
}
]
}