48 votes

Comment créer manuellement un nouvel utilisateur et une session utilisateur dans Devise?

J'ai un formulaire où j'recueillir beaucoup d'informations dans les Rails. Une partie de ce formulaire les champs pour les nouveaux utilisateurs de s'inscrire. Depuis le dispositif est contrôleurs/actions spécifiquement pour créer un nouvel utilisateur, je ne sais pas combien de programmation pour créer un utilisateur dans un tout autre action, qui crée également un autre record. Je ne peux vraiment pas avoir le formulaire d'inscription distinct. Je ne peux pas comprendre comment créer un utilisateur, puis connecter l'utilisateur, comme j'ai pu le faire facilement dans Authlogic.

J'ai utilisé les deux Authlogic et de Concevoir, et pense que chacun a ses forces et ses faiblesses. Avec Concevoir, j'aime la façon dont c'est rapide à "y aller" avec un nouveau projet, mais la personnalisation semble être une douleur. Authlogic eu tellement de problèmes avec Rails 3, un temps, que je suis passé à Concevoir. Je suis en train de travailler sur un nouveau projet et de commencer à partir de zéro.

Donc, je pense qu'il y a 2 réponses possibles à cette question: (a) la façon de faire dans Concevoir, ou (b) pourquoi je devrais simplement passer à Authlogic avec Rails 3 à la place.

84voto

David Sulc Points 13259

Vous pouvez créer un nouvel utilisateur Devise simplement en créant un nouveau modèle utilisateur (voir https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface )

 @user = User.new(:email => 'test@example.com', :password => 'password', :password_confirmation => 'password')
@user.save
 

Pour vous connecter à votre nouvel utilisateur, utilisez sign_in @user

9voto

vanship82 Points 129

Économiser de l'utilisateur nouvellement créé avant sign_in va échouer, car concevoir n'a pas encore rempli les champs requis pour l'objet Utilisateur encore. David code du travail pour la page en cours, mais la prochaine page ne sera pas obtenir la signature de l'utilisateur, car l'utilisateur n'est enregistré après la session est définie. Cela se produit lorsque j'utilise Mongoid, et je ne sais pas si c'est un problème spécifique à Mongodb.

Pour remédier à ce problème, j'ai une solution imparfaite pour appeler sign_in deux fois. La première sign_in permettra d'économiser de l'utilisateur. Il fonctionne, mais les gens peuvent améliorer certainement.

@user = User.new(:email => 'test@example.com',
                 :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 

4voto

Raúl Contreras Points 11

Pour les nouvelles personnes voyant cette question ...

Un moyen simple de le faire est dans votre config / routes.rb

vous devriez avoir une ligne comme celle-ci: devise_for: utilisateurs

donc, il vous suffit d'ajouter un préfixe de chemin que devise utilisera:

devise_for: utilisateurs,: path_prefix => 'auth'

J'espère que cela aide!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X