【发布时间】:2020-06-18 20:56:18
【问题描述】:
您好,我正在使用 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)
但是,即使我指定了access_type='offline',令牌也不包含refresh_token。如果我的应用程序已经在我的帐户中注册,我也添加了 prompt='content' 的参数。
我错过了什么吗?
此外,保持refresh_token 是长时间运行用户应用程序的最佳方式吗?我不喜欢打扰用户多次登录。
提前致谢!
【问题讨论】:
标签: python google-api google-oauth authlib starlette