gpt4 book ai didi

python - 如何在 fastapi 中使用刷新 token ?

转载 作者:行者123 更新时间:2023-12-03 14:42:19 33 4
gpt4 key购买 nike

我试图找到一个使用 refresh token 的例子在fastapi中。
fastapi docs提供了一个示例,说明如何创建具有有限生命周期的不记名 token ,但未提供如何刷新 token 的示例。

对于 flask ,有 flask-jwt-extended但没有找到类似 fastapi 的东西。

任何建议将不胜感激 thx!

最佳答案

您可能想查看 fastapi-jwt-auth .它的灵感来自于flask-jwt-extended。有一个很好的文档,说明如何使用良好的刷新 token examples .
首先你需要安装包:pip install fastapi-jwt-auth .并配置 secret 。
然后在登录时创建刷新 token 和访问 token 并将其返回给用户。


from fastapi import FastAPI, Depends, HTTPException
from fastapi_jwt_auth import AuthJWT
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
email: str
password: str

class Settings(BaseModel):
authjwt_secret_key: str = "secret"

@AuthJWT.load_config
def get_config():
return Settings()

@app.post('/login')
def login(user: User, Authorize: AuthJWT = Depends()):
if user.email != "test@test.com" or user.password != "test":
raise HTTPException(status_code=401,detail="Incorrect email or password")
access_token = Authorize.create_access_token(subject=user.email)
refresh_token = Authorize.create_refresh_token(subject=user.email)
return {"access_token": access_token, "refresh_token": refresh_token}

在下一步中,您应该创建一个端点来刷新访问 token 。
@app.post('/refresh')
def refresh(Authorize: AuthJWT = Depends()):
Authorize.jwt_refresh_token_required()
current_user = Authorize.get_jwt_subject()
new_access_token = Authorize.create_access_token(subject=current_user)
return {"access_token": new_access_token}

# Example protected Endpoint
@app.get('/hello')
def refresh(Authorize: AuthJWT = Depends()):
Authorize.jwt_required()
return {"hello": "world"}
请注意,这只是从安全角度来看的一个小例子,您应该在刷新时交换刷新 token 并将旧 token 列入黑名单。因此,图书馆提供装饰器 @AuthJWT.token_in_denylist_loader .您可以使用内存数据库来实现黑名单,该数据库将无效的 token 保留到到期日期。同样在生产中选择一个真正的 secret 。

关于python - 如何在 fastapi 中使用刷新 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62413698/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com