Flask-User, как использовать uuid вместо int в качестве идентификатора пользователя - PullRequest
0 голосов
/ 11 мая 2018

В настоящее время я использую безопасность флеш-памяти и думаю изменить ее на флеш-пользователь, в основном для функции USER_REQUIRE_INVITATION, так как я бы предпочел не писать систему приглашений.

flask-user == 0.6.21

Структура базы данных выглядит аналогично, поэтому ее замена выглядит каплей.

Во-первых, у пользователя фляги есть int для идентификатора пользователя, тогда как при работе с флеш-безопасностью я использовал 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?

Редактировать: Я использую текст для uuid

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

1 Ответ

0 голосов
/ 11 мая 2018

Не зная, как выглядит ваша модель пользователя, идентификатор должен быть примерно таким. 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
...