0

我想为字段 id 有一个自定义键,例如 id_user,我尝试了以下

class UserModel(db.model, UserMixin)
...
        @property
        def id(self):
            return self.id_user

但无法让它工作。当我尝试登录时,它会向我发送此消息:

{
"message": "You don't have the permission to access the requested resource. It is either read-protected or not readable by the server."
}
4

2 回答 2

0

我最终得到了一个讨厌的解决方案。我克隆了 UserModel 对象,为 id 添加了一个重复的字段,使用我需要的自定义键,并告诉 Flask-Security 使用该对象作为 UserModel 这是我使用的函数代码:

def clone_model(model):
data = model
attr = getattr(model, "id_user")
setattr(data, "id", attr)
return data

cUserModel = clone_model(UserModel)
user_datastore = SQLAlchemyUserDatastore(db, cUserModel, Roles)

security = Security(app, user_datastore)

希望有人觉得它有用

于 2020-03-29T21:42:22.567 回答
0

对于使用Flask-Security-Too并希望更改默认 id 列的任何人,这是我的解决方案。

像往常一样定义用户和角色表,并根据您的偏好定义 id 列。


class Role(db.Model, FsRoleMixin):
    __tablename__ = 'role'

    id = Column(String, primary_key=True)


class Users(db.Model, FsUserMixin):
    __tablename__ = 'users'

    id = Column(String, primary_key=True)

对我来说,我需要使用Stringprimary_key 列。为此,我需要更改多对多关系表(roles_users)。下面是相同的代码片段。

# Initialize the db object
db = SQLAlchemy()


# import this Class
from flask_security.models.fsqla_v2 import FsModels

# call this after creating the db object
FsModels.db = db
FsModels.user_table_name = 'users' # If you want a different table name than the default
FsModels.role_table_name = 'role'

# Create the relationship table as per your preferences
FsModels.roles_users = db.Table(
    "roles_users",
    Column("user_id", String, ForeignKey("users.id")),
    Column("role_id", String, ForeignKey("role.id")),
)

于 2021-07-11T17:34:52.277 回答