2017-01-22 96 views
3

我很难用Flask-Dance实现Google OAuth。这笔交易。为了使一切工作,我需要在创建谷歌的蓝图时设置offline=Truereprompt_consent=True使用Google API通过Flask-Dance刷新令牌

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传递?

回答

1

具体来说,在谷歌烧瓶舞蹈中,您需要实施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 db。

+0

谢谢迈克!我不确定上面的代码片段是如何与所述问题相关的。当然,我在我的应用程序中有一个数据库,但问题是如何登录而无需再次表示同意 –