Если вы хотите воспользоваться встроенной функцией Auth register (), вы можете немного ее взломать следующим образом:
@auth.requires_membership('admin')
def register()
admin_auth = session.auth
auth.is_logged_in = lambda: False
def post_register(form):
session.auth = admin_auth
auth.user = session.auth.user
auth.settings.register_onaccept = post_register
return dict(form=auth.register())
Обычно Auth.register () проверяет, вошел ли пользователь в систему и, если это так, перенаправляет на страницу профиля. Вышеуказанный метод заменяет метод auth.is_logged_in () лямбда-выражением, которое просто возвращает False, поэтому перенаправление не произойдет. Auth.register () также устанавливает для session.auth и auth.user значения, связанные с вновь зарегистрированным пользователем, поэтому приведенный выше код сохраняет значения администратора и использует обратный вызов register_onaccept для восстановления session.auth и auth.user к значениям администратора.
Другой подход заключается в создании собственной регистрационной формы на основе таблицы db.auth_user и использовании метода Auth.get_or_create_user () для добавления нового пользователя:
@auth.requires_membership('admin')
def register():
form = SQLFORM(db.auth_user)
if form.validate():
admin_user = auth.user
auth.get_or_create_user(form.vars)
auth.user = admin_user
return dict(form=form)
Однако в этом случае вы не получите поле подтверждения пароля, которое встроенная функция register () автоматически добавляет к форме регистрации. Как и во встроенном методе register (), get_or_create_user () также устанавливает auth.user в запись нового пользователя, поэтому после вставки необходимо заново установить его обратно в запись для пользователя admin.
Обратите внимание, что оба вышеупомянутых метода автоматически создадут новую уникальную группу Auth для нового пользователя и назначат пользователя в эту группу, если auth.settings.create_user_groups равен True (по умолчанию). Вместо описанных выше методов вы можете просто использовать стандартную SQLFORM для добавления новых пользователей, но тогда вам придется вручную обрабатывать создание и добавление в группы.
Возможно, нам следует добавить опцию, чтобы сделать это проще.