OAuth2 规定在使用(我们打算用的)「password 流程」时,客户端/用户必须将 username 和 password 字段作为表单数据发送。我们看下在我们应该去如何实现呢。
我们写一个登录接口,默认返回token和token_type
from fastapi import FastAPI, Depends, status, HTTPException
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from pydantic import BaseModel
from typing import Optional
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
fake_db_users ={
"mrli": {
"username": "mrli",
"full_name": "mrli_hanjing",
"email": "mrli@qq.com",
"hashed_password": "mrli",
"disabled": False
}
}
app = FastAPI()
def fake_hash_password(password: str):
"""模拟将密码加密"""
return password
class User(BaseModel):
username: str
email: Optional[str] = None
full_name: Optional[str] = None
disabled: Optional[bool] = None
class UserInDB(User):
hashed_password: str
def get_user(db_users, username: str):
if username in db_users:
user_dict = db_users[username]
return UserInDB(**user_dict)
def fake_decode_token(token):
"""我们模拟返回的token值就是username,所以下面可以直接传token"""
user = get_user(fake_db_users, token)
return user
def get_current_user(token: str = Depends(oauth2_scheme)):
user = fake_decode_token(token)
if not user:
raise HTTPException(

最低0.47元/天 解锁文章
487

被折叠的 条评论
为什么被折叠?



