J’ai un formulaire où je recueille beaucoup d’informations dans Rails. Une partie de ce formulaire est constituée de champs permettant à un nouvel utilisateur de s’inscrire. Étant donné que Devise dispose de contrôleurs / actions spécifiquement destinés à créer un nouvel utilisateur, je ne sais pas comment créer par programmation un utilisateur dans une action entièrement différente qui crée également un autre enregistrement. Je ne peux vraiment pas séparer le formulaire d’inscription de l’utilisateur. Je n’arrive pas à comprendre comment créer un utilisateur, puis à connecter l’utilisateur, comme je pourrais facilement le faire dans Authlogic.
J’ai utilisé Authlogic et Devise, et je pense que chacun a ses forces et ses faiblesses. Avec Devise, j’adore la rapidité avec laquelle on peut «commencer» un nouveau projet, mais la personnalisation semble être pénible. Authlogic avait tellement de problèmes avec Rails 3 il y a quelque temps, que je suis passé à Devise. Je travaille maintenant sur un nouveau projet et commence à partir de zéro.
Donc, je pense qu’il y a 2 réponses possibles à cette question: (a) comment faire cela dans Devise, ou (b) pourquoi je devrais simplement passer à Authlogic avec Rails 3 à la place.
Vous pouvez créer un nouvel utilisateur Devise simplement en créant un nouveau modèle d’utilisateur (voir 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
Pour vous connecter à votre nouvel utilisateur, utilisez sign_in @user
L’enregistrement de l’utilisateur nouvellement créé avant sign_in échouera car le programme n’a pas encore renseigné les champs requirejs pour l’object Utilisateur. Ainsi, le code de David fonctionnera pour la page en cours, mais la page suivante n’obtiendra pas l’utilisateur connecté, car l’utilisateur n’est enregistré qu’une fois la session définie. Cela se produit lorsque j’utilise Mongoid, et je ne sais pas si c’est un problème spécifique à Mongodb.
Pour résoudre ce problème, j’ai une solution très imparfaite pour appeler deux fois sign_in. Le premier sign_in sauvera l’utilisateur. Cela fonctionne, mais les gens peuvent certainement l’améliorer.
@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
Pour les nouvelles personnes qui voient cette question …
Un moyen simple de le faire est dans votre
config/routes.rb
vous devriez avoir une ligne comme celle-ci:
devise_for :users
il suffit donc d’append un préfixe de chemin que
devise_for :users, :path_prefix =>'auth'
J’espère que cela aide!