首页 > 解决方案 > Flask-Dance @oauth_authorized.connect_via() 方法在登录时永远不会执行

问题描述

我正在使用 Flask-Dance 库通过 Google 登录用户。我能够成功验证用户身份,但 @oauth_authorized.connect_via(google_blueprint) 下的代码永远不会执行。我尝试重命名一些蓝图/方法,但似乎没有任何效果。我知道这个问题是特定于谷歌登录的,因为我在 twitter 和 github 上尝试了同样的代码,一切都很完美。我是否缺少关于谷歌登录的特定概念?

代码:

google_blueprint = make_google_blueprint(client_id='CLIENT_ID_HERE',client_secret='SECRET_HERE')
app.register_blueprint(google_blueprint,url_prefix='/google_login')
google_blueprint.backend = SQLAlchemyBackend(OAuth, db.session,user=current_user,user_required=False)

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(15), unique=True)
    email = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(80))
    payed = db.Column(db.Boolean)
class OAuth(OAuthConsumerMixin, db.Model):
    user_id = db.Column(db.Integer,db.ForeignKey(User.id))
    user = db.relationship(User)

@app.route('/google')
def google_login():
    if not google.authorized:
        return redirect(url_for('google.login'))
    return redirect(url_for('dashboard'))

@oauth_authorized.connect_via(google_blueprint)
def google_is_logged_in(blueprint,token):
    global paying_dude
    account_info = blueprint.session.get('/user')
    if account_info.ok:
        account_info_json = account_info.json()
        username = account_info_json['first_name']
        query = User.query.filter_by(username=username)
        try:
            user=query.one()
        except NoResultFound:
            user = User(username=username,payed=False)
            db.session.add(user)
            db.session.commit()
            paying_dude = username
            return redirect(url_for('pay'))
        if user.payed:
            login_user(user)
            return redirect(url_for('dashboard'))
        return redirect(url_for('pay'))

标签: flaskgoogle-oauthflask-login

解决方案


尝试改变

account_info = blueprint.session.get('/user')

account_info = blueprint.session.get('/oauth2/v2/userinfo')

如果你很感兴趣,可以在这里查看我的工作要点:

https://gist.github.com/ericcgu/6eae82aa99a37e6a4369cd5513fc4a54


推荐阅读