在 flask-security 中有 users.id 的自定义主键
Have a custom primary key for users.id in flask-security
我想为字段 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."
}
我最终得到了一个糟糕的解决方案。我克隆了 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)
希望有人觉得有用
对于正在使用 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)
对于我来说,我需要使用 String
primary_key 列。为此,我需要更改多对多关系 table (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")),
)
我想为字段 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."
}
我最终得到了一个糟糕的解决方案。我克隆了 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)
希望有人觉得有用
对于正在使用 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)
对于我来说,我需要使用 String
primary_key 列。为此,我需要更改多对多关系 table (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")),
)