ruby on rails - software - ¿Cómo crear manualmente una nueva sesión de usuario y usuario en Devise?
rubyonrails (3)
Tengo un formulario donde recopilo mucha información en Rails. Parte de este formulario son campos para que un nuevo usuario se registre. Dado que Devise tiene controladores / acciones específicamente para crear un nuevo usuario, no sé cómo crear programáticamente un usuario en una acción completamente diferente que también crea otro registro. Realmente no puedo tener el formulario de registro de usuario por separado. No puedo entender cómo crear un usuario y luego iniciar sesión con el usuario, como podría hacer fácilmente en Authlogic.
He usado Authlogic y Devise, y creo que cada uno tiene sus fortalezas y debilidades. Con Devise, me encanta lo rápido que es "ponerme en marcha" con un nuevo proyecto, pero personalizarlo parece ser un problema. Authlogic tenía tantos problemas con Rails 3 hace un tiempo que me cambié a Devise. Ahora estoy trabajando en un nuevo proyecto y puedo empezar desde cero.
Así que creo que hay 2 posibles respuestas a esta pregunta: (a) cómo hacer esto en Devise, o (b) por qué debería cambiar a Authlogic with Rails 3 en su lugar.
Guardar el usuario recién creado antes de sign_in fallará porque el dispositivo aún no ha rellenado los campos requeridos para el objeto Usuario. Entonces, el código de David funcionará para la página actual, pero la página siguiente no recibirá al usuario que inició sesión, ya que el usuario solo se guarda después de establecer la sesión. Esto sucede cuando uso Mongoid, y no sé si es un problema específico de Mongodb.
Para resolver este problema, tengo una solución muy imperfecta para llamar a sign_in dos veces. El primer signo_in salvará al usuario. Simplemente funciona, pero las personas pueden mejorarlo sin dudas.
@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
Para personas nuevas que ven esta pregunta ...
Una forma simple de hacer esto es en su
config/routes.rb
deberías tener una línea como la siguiente:
devise_for :users
entonces, solo tiene que agregar un prefijo de ruta que el dispositivo usará:
devise_for :users, :path_prefix =>''auth''
¡Espero eso ayude!
Puede crear un nuevo usuario de Devise simplemente creando un nuevo modelo de usuario (consulte 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
Para sign_in @user
sesión en su usuario recién creado, use sign_in @user