Подтвердить что ты не робот

Как вручную создать новый пользовательский и пользовательский сеансы в Devise?

У меня есть форма, где я собираю много информации в Rails. Часть этой формы - это поля для регистрации нового пользователя. Поскольку у Devise есть контроллеры/действия специально для создания нового пользователя, я не знаю, как программно создать пользователя в совершенно другом действии, которое также создает другую запись. У меня действительно не может быть отдельная форма регистрации пользователя. Я не могу понять, как создать пользователя, а затем зарегистрировать пользователя, как я мог бы легко сделать в Authlogic.

Я использовал как Authlogic, так и Devise, и думаю, что у каждого есть свои сильные и слабые стороны. С Devise мне нравится, как быстро "идти в ногу" с новым проектом, но настраивать его, кажется, боль. У Authlogic было так много проблем с Rails 3 некоторое время назад, что я переключился на Devise. Теперь я работаю над новым проектом и начинаю с нуля.

Итак, я думаю, что есть два возможных ответа на этот вопрос: (a) как это сделать в Devise или (b) почему я должен просто переключиться на Authlogic с Rails 3 вместо этого.

4b9b3361

Ответ 1

Вы можете создать нового пользователя Devise, просто создав новую модель пользователя (см. https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface)

@user = User.new(:email => '[email protected]', :password => 'password', :password_confirmation => 'password')
@user.save

Чтобы войти в новый созданный пользователь, используйте sign_in @user

Ответ 2

Сохранение вновь созданного пользователя до того, как sign_in завершится с ошибкой, так как devise еще не заполнил обязательные поля для объекта User. Поэтому код Дэвида будет работать для текущей страницы, но следующая страница не получит подписанного пользователя, так как пользователь будет сохранен только после того, как будет установлен сеанс. Это происходит, когда я использую Mongoid, и я не знаю, является ли это проблемой, характерной для Mongodb.

Чтобы решить эту проблему, у меня есть очень несовершенное решение для вызова sign_in дважды. Первый sign_in сохранит пользователя. Он просто работает, но люди могут его улучшить, конечно.

@user = User.new(:email => '[email protected]',
                 :password => 'password',
                 :password_confirmation => 'password')
# This will save the user in db with fields for devise
sign_in @user
# :bypass is set to ignore devise related callbacks and only save the
# user into session.
sign_in @user, :bypass => true 

Ответ 3

Для новых людей, которые видят этот вопрос...

Простой способ сделать это в

config/routes.rb

у вас должна быть строка, подобная следующей:

devise_for :users

так что вам просто нужно добавить префикс пути, который будет использовать devose:

devise_for :users, :path_prefix =>'auth'

Надеюсь, что это поможет!