嗨,我正在使用 authlib/FastAPI/Google 开发一个用于登录过程的网络应用程序,并希望保留refresh_token
这样我可以让用户在应用程序中保持足够的时间。
我遵循了https://docs.authlib.org/en/latest/client/starlette.html中的标准程序
oauth = OAuth()
oauth.register(
name='google',
client_id='xxx',
client_secret='yyy',
api_base_url='https://www.googleapis.com/oauth2/v3/',
access_token_url='https://accounts.google.com/o/oauth2/token',
authorize_url='https://accounts.google.com/o/oauth2/auth',
jwks_uri='https://www.googleapis.com/oauth2/v3/certs',
client_kwargs={
'scope': 'email openid',
'access_type': 'offline',
'prompt': 'consent',
}
)
from starlette.requests import Request
@app.get("/login")
def login_via_google(request: Request):
redirect_uri = 'https://example.com/auth'
return await oauth.google.authorize_redirect(request, redirect_uri)
@app.get("/auth")
def auth_via_google(request: Request):
token = await oauth.google.authorize_access_token(request)
user = await oauth.google.parse_id_token(request, token)
return dict(user)
但是,refresh_token
即使我指定了access_type='offline'
. 如果我的应用程序已经在我的帐户中注册,我也添加了一个参数prompt='content'
。
我错过了什么吗?
此外,保持refresh_token
一个长期运行的用户应用程序的最佳方式是什么?我不喜欢打扰用户多次登录。
提前致谢!