【问题标题】:Flask-Dance SQLAlchemy integration not workingFlask-Dance SQLAlchemy 集成不起作用
【发布时间】:2019-12-31 20:31:17
【问题描述】:

我正在使用 Flask-Dance 来使用 Google 登录我的应用程序。我也在使用 SQLAlchemy 和 Flask-Login。

关于 Google 登录的一切工作正常,但它应该将令牌数据保存在由 SQLAlchemy (flask_dance_oauth) 创建的表中,但事实并非如此。每次我登录时,它都不会在表中保存令牌数据,即使我指定了它。

from app import db
from flask_dance.contrib.google import make_google_blueprint
from flask_dance.consumer.storage.sqla import SQLAlchemyStorage
from flask_login import current_user
from Tables import OAuth


blueprint = make_google_blueprint(
    client_id="clientid",
    client_secret="secret",
    scope=['https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/userinfo.email',
           'openid'],
    storage=SQLAlchemyStorage(OAuth, db.session, user=current_user))

还有我的 SQLAlchemy 课程:

from app import db
from datetime import *
from flask_dance.consumer.storage.sqla import OAuthConsumerMixin
from flask_login import UserMixin


class Users(UserMixin, db.Model):
    __bind_key__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    uuid = db.Column(db.String(50), index=True, unique=True)
    email = db.Column(db.String(100), unique=True)
    fname = db.Column(db.String(20))
    lname = db.Column(db.String(20))
    authenticated = db.Column(db.Boolean, default=True)


class OAuth(OAuthConsumerMixin, db.Model):
    __bind_key__ = 'users'
    user_id = db.Column(db.String(50), db.ForeignKey(Users.uuid))
    user = db.relationship(Users)

奇怪的是,我在另一个项目中编写了完全相同的代码,并且运行良好。但在这一个它不会。可能是因为用户表的构建方式吗?这里有名字和姓氏,但我制作的另一个项目中的 User 表只有 UUID 和电子邮件。任何帮助将不胜感激。

【问题讨论】:

    标签: python-3.x flask flask-sqlalchemy flask-login flask-dance


    【解决方案1】:

    你解决了吗?数据库中的 OAuth 表名是什么?如果不是flask_dance_oauth,那么在我看来,您缺少OAuth 表的表名。应该是:

    class OAuth(OAuthConsumerMixin, db.Model):
        __bind_key__ = 'users'
        __tablename__ = 'flask_dance_oauth'
        user_id = db.Column(db.String(50), db.ForeignKey(Users.uuid))
        user = db.relationship(Users)
    

    Flask Dance 期望您的数据库中有此表,并在其中更新该用户的令牌以供重复使用等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-14
      • 2017-11-18
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      相关资源
      最近更新 更多