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



我很难用Flask-Dance实现Google OAuth。这是交易。为了使一切正常,我需要设置offline=True以及创建谷歌蓝图时的reprompt_consent=True

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

但是,reprompt_consent=True自然会使应用程序在每次用户登录时重新提示用户进行离线访问。

这两个参数的任何其他组合都会导致缺少Oauth2lib refresh_token

我本身不需要离线访问,但正如我认为的那样,这似乎是摆脱缺少参数错误的唯一方法。那么,有没有其他方法可以通过Flask-Dance登录Google并传递refresh_token呢?

特别是在谷歌的烧瓶舞中,你需要实现一个Backend来存储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)

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

对于其他寻找答案的人:如果您已经在没有offline=True设置的情况下授予访问权限,则必须转到您的 Google 帐户并撤消对您的应用的访问权限,然后才能自行运行。否则,将需要reprompt_consent=True

最新更新