当用户使用flask-user注册到网站时,指定默认用户角色

时间:2018-03-10 23:48:20

标签: python flask

我试图为新注册的帐户分配默认用户角色。我使用了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()

但是,当用户注册时,如何自动完成?

3 个答案:

答案 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
    )

The original class from the docs here.

答案 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)
相关问题