【问题标题】:Flask-User, how to use a uuid instead of int as user idFlask-User,如何使用 uuid 而不是 int 作为用户 id
【发布时间】:2018-05-11 01:33:39
【问题描述】:

我目前正在使用flask-security,我正在考虑将其更改为flask-user,主要用于'USER_REQUIRE_INVITATION'功能,因为我不想编写邀请系统。

烧瓶用户==0.6.21

数据库结构看起来很相似,所以它看起来是一个替代品。

其中之一是烧瓶用户使用 int 作为用户 ID,而对于烧瓶安全,我使用了 uuid。 这会导致错误:

ValueError: invalid literal for int() with base 10: '29d726e2-e160-4cbc-b0d8-befeca8bdeb6'

这是由于 uuid 被强制转换为 int(在烧瓶用户代码库中)。

    def setup_login_manager(self, app):

    # Flask-Login calls this function to retrieve a User record by user ID.
    # Note: user_id is a UNICODE string returned by UserMixin.get_id().
    # See https://flask-login.readthedocs.org/en/latest/#how-it-works
    @self.login_manager.user_loader
    def load_user_by_id(user_unicode_id):
        user_id = int(user_unicode_id)
        #print('load_user_by_id: user_id=', user_id)
        return self.get_user_by_id(user_id)

我更喜欢使用 uuid vs 和 int。 有什么好的方法可以使用 uuid 的 flask-user 吗?

编辑:我正在为 uuid 使用文本

id = db.Column(
    'id', db.Text(), default=lambda: str(uuid.uuid4()), primary_key=True)

【问题讨论】:

  • Flask-User 的primary keys 部分表示可以是字符串。
  • 谢谢,但这是针对“alpha”中的 v1.0。

标签: flask flask-login


【解决方案1】:

在不知道你的用户模型是什么样子的情况下,id 可能应该是这样的。 UUID 可以表示为字符串。

class User(db.Model, UserMixin):
    pk = db.Column(db.String, primary_key=True)

    @property
    def id(self):
        return self.pk

    @id.setter
    def id(self, value):
        self.pk = value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多