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

时间:2017-01-22 16:51:26

标签: 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"
)

然而reprompt_consent=True自然会让用户每次用户登录时都会重新启动用户进行离线访问。

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

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

2 个答案:

答案 0 :(得分:0)

特别是在谷歌的烧瓶舞中,您需要实施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数据库。

答案 1 :(得分:0)

对于正在寻找答案的其他人:如果您已经在没有myNotificationNameInRaw设置的情况下授予了访问权限,则必须先访问您的Google帐户并撤消对应用程序的访问权限,然后才能单独使用。否则,将需要raw