from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
app = FastAPI()
# OAuth2PasswordBearer 类用于处理密码和 Bearer Token
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
# 模拟的用户数据
fake_users_db = {
"fakeuser": {
"username": "fakeuser",
"hashed_password": "fakehashedpassword",
"email": "fakeuser@example.com",
}
}
# 模拟函数,用于验证用户名和密码
def verify_user(username: str, password: str):
user = fake_users_db.get(username)
if user and user["hashed_password"] == password:
return user
# 模拟函数,用于获取当前用户信息
def get_current_user(token: str = Depends(oauth2_scheme)):
credentials_exception = HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid credentials",
headers={"WWW-Authenticate": "Bearer"},
)
user_info = verify_user(token, token)
if user_info is None:
raise credentials_exception
return user_info
# 登录路径操作,使用 OAuth2PasswordRequestForm 从表单获取用户名和密码
@app.post("/token")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
user_info = verify_user(form_data.username, form_data.password)
if user_info is None:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid credentials",
headers={"WWW-Authenticate": "Bearer"},
)
return {"access_token": user_info["username"], "token_type": "bearer"}
# 受保护的路径操作,使用 get_current_user 依赖项获取当前用户信息
@app.get("/users/me", response_model=dict)
async def read_users_me(current_user: dict = Depends(get_current_user)):
return current_user
在这个示例中:
- /token 路径操作用于登录,接受用户名和密码,并返回一个包含访问令牌(Bearer Token)的响应。
- /users/me 路径操作用于获取当前用户信息,使用 get_current_user 依赖项来验证令牌,并从令牌中提取用户信息。
这是一个简单的例子,实际应用中你可能需要更强大的身份验证和令牌管理机制,例如使用数据库存储用户信息、JWT(JSON Web Tokens)等。确保在实际应用中使用适当的安全措施。
转载请注明出处:http://www.pingtaimeng.com/article/detail/7392/FastAPI