我试图为新注册的帐户分配默认用户角色。我使用了flask-user插件(http://flask-user.readthedocs.io/en/latest/index.html)。在flask-user文档中,他们使用此代码手动将用户角色分配给新帐户:
if not User.query.filter(User.email == 'admin@example.com').first():
user = User(
email='admin@example.com',
email_confirmed_at=datetime.datetime.utcnow(),
password=user_manager.hash_password('Password1'),
)
user.roles.append(Role(name='Admin'))
user.roles.append(Role(name='Agent'))
db.session.add(user)
db.session.commit()
但是,当用户注册时,如何自动完成?
答案 0 :(得分:1)
使用信号。成功注册用户后,会发出user_registered
信号。其订户可以执行所有必要的初始化:
from flask_user import user_registered
@user_registered.connect_via(app)
def _after_user_registered_hook(sender, user, user_invite, **extra):
role = Role.query.filter_by(name='Agent').one()
user.roles.append(role)
app.user_manager.db_adapter.commit()
答案 1 :(得分:0)
分配默认角色的最简单方法是修改UserRoles类,将默认值添加到role_id列。
class UserRoles(db.Model):
__tablename__ = 'user_roles'
id = db.Column(
db.Integer(),
primary_key=True
)
user_id = db.Column(
db.Integer(),
db.ForeignKey('users.id', ondelete='CASCADE')
)
role_id = db.Column(
db.Integer(),
db.ForeignKey('roles.id',
ondelete='CASCADE'),
default=1
)
答案 2 :(得分:0)
根据最新的flask-user docs,您可以使用它。它帮助我解决了问题。导入很重要。
from flask_user.signals import user_registered
@user_registered.connect_via(app)
def _after_registration_hook(sender, user, **extra):
print('user is registered', sender, user)