通过Flask-Dance使用Google API刷新令牌

Nic*_*sky 6 python flask oauth-2.0 google-oauth

我很难用Flask-Dance实现Google OAuth.这是交易.为了使一切工作我需要设置offline=Truereprompt_consent=True创建Google蓝图时:

google_bp = make_google_blueprint(
    client_id="trololo",
    client_secret="ololo",
    offline=True,
    reprompt_consent=True,
    scope=["email"],
    redirect_url="/callback/google"
)
Run Code Online (Sandbox Code Playgroud)

然而,reprompt_consent=True每当用户登录时,自然会使应用程序重新启动用户进行脱机访问.

这两个参数的任何其他组合导致丢失refresh_tokenOauth2lib.

我本身不需要脱机访问,但正如我所知,它似乎是逃避丢失参数错误的唯一方法.那么有没有其他方式通过Flask-Dance登录谷歌并获得refresh_token传递?

Mik*_*ung 0

特别是在 Google 的 Flask dance 中,您需要实现 aBackend来存储 OAuth Dance 中的任何内容。这是文档中的一个片段,可帮助您入门。

from flask_sqlalchemy import SQLAlchemy
from flask_login import current_user
from flask_dance.consumer.backend.sqla import OAuthConsumerMixin, SQLAlchemyBackend

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    # ... other columns as needed

class OAuth(OAuthConsumerMixin, db.Model):
    user_id = db.Column(db.Integer, db.ForeignKey(User.id))
    user = db.relationship(User)

blueprint.backend = SQLAlchemyBackend(OAuth, db.session, user=current_user)
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,您现在可以查询用户的 SQL 数据库。