2013-06-17 7 views
2

Я пытаюсь установить роль по умолчанию, когда пользователь регистрируется с моим сайтом, в настоящее время роли не устанавливаются, когда пользователь регистрируется.Установка роли по умолчанию в flask-security

Я создал роли, в которых я нуждаюсь, поэтому мне просто нужно определить их как-то. Не знаю, как это сделать.

Код, который у меня есть, в значительной степени копирует пасту из краткого руководства по началу работы. Во всяком случае, здесь:

# Define models 
roles_users = db.Table('roles_users', 
     db.Column('user_id', db.Integer(), db.ForeignKey('user.id')), 
     db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))) 

class Role(db.Model, RoleMixin): 
    id = db.Column(db.Integer(), primary_key=True) 
    name = db.Column(db.String(80), unique=True) 
    description = db.Column(db.String(255)) 

class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(255), unique=True) 
    password = db.Column(db.String(255)) 
    active = db.Column(db.Boolean()) 
    confirmed_at = db.Column(db.DateTime()) 
    roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) 

# Setup Flask-Security 
user_datastore = SQLAlchemyUserDatastore(db, User, Role) 
security = Security(app, user_datastore) 


import users.getUser as getUser 

#@app.before_first_request 
def create_user(): 
    db.create_all() 
    user_datastore.create_user(email='[email protected]', password='password') 
    db.session.commit() 

@flask_sijax.route(app, '/') 
def test(): 
    print user_datastore.create_role(name='User', description='Generic user role') 
    db.session.commit() 
    return render_template('test.html') 

ответ

7

Я установил его, используя информацию из этого git issue с этим:

@user_registered.connect_via(app) 
def user_registered_sighandler(app, user, confirm_token): 
    default_role = user_datastore.find_role("User") 
    user_datastore.add_role_to_user(user, default_role) 
    db.session.commit() 
+0

добавить использовать 'user_registered.connect (user_registered_sighandler)' вместо декоратора для того, чтобы сделать эту работу. –

-1

Если вы уже создали свою роль «Пользователь», Вы можете добавить эту роль пользователю при создании/регистрации пользователя.

def create_user(): 
    db.create_all() 
    user = user_datastore.create_user(email='[email protected]', password='password') 
    default_role = user_datastore.find_role(name="User") 
    user_datastore.add_role_to_user(user, default_role) 
    db.session.commit() 
Смежные вопросы