Je viens de commencer à travailler sur une application Rails 4 (4.2.3) où j'utilise J'ai suivi ce guide de plateformeatec: https://github.com/plataformatec/devise/wiki/how-to:--Create-Guest-user p> Créer l'utilisateur invité fonctionne, mais lors de l'inscription Une session d'utilisateur invité active, je reçois l'erreur suivante: p> Si j'effectue ma session, cela fonctionne. La méthode qui gère mon utilisateur invité ressemble à ceci: p> comme mentionné, la création d'utilisateurs invités semble fonctionner très bien. Mais cette logique n'arrive jamais: p> Je suis à peu près sûr que ma session d'utilisateur invité est conflictuelle avec mon nouvel utilisateur et provoque cette erreur de concevoir (puisque l'utilisateur invité ne reçoit jamais supprimé Sur l'inscription): P> Devise code> pour l'authentification de l'utilisateur. Je souhaite que les utilisateurs puissent jouer avec l'application avant de signer le UPP en créant un projet de test et être connecté en tant qu'utilisateur invité. Lorsque l'utilisateur s'inscrit (ou dans), je souhaite affecter le projet de test au nouvel utilisateur actuel.
devise_for :users, controllers: { sessions: "users/sessions", registrations: "users/registrations" }
root :to => 'public#index'
resources :apps
get 'users/show', to: "users#show"
get 'users', to: "users#index"
post 'guests/receive_guest', to: "guests#receive_guest"
3 Réponses :
La réponse ci-dessus manque d'explication, la méthode dans votre applicationController, vous devez définir puis définir le rappel comme si: < / p> Avez-vous essayé d'utiliser Devise-invités A > Gem? Il met en œuvre cette fonctionnalité, au lieu de le faire à partir de zéro ... p> Cochez cette page Exemple Contrôleur qui met en œuvre la connexion client. J'espère que cela aide. P> p> loggin_in code> n'est pas appelée parce que vous n'avez pas défini votre rappel
Merci. Examinera votre solution. Semble être un moyen propre de le faire. J'ai créé une réponse ci-dessous avec la façon dont je l'ai fait pour l'instant, je l'ai eu pour travailler au moins. N'hésitez pas à venir avec suggestion d'amélioration.
Je pense que la question est causée par la stratégie Guest_user Warden référencée dans le guide. Étant donné que Devise vérifie une session de garde valide avant de vous connecter, il provoque une redirection et un message flash apparaît:
if authenticated && resource = warden.user(resource_name) flash[:alert] = I18n.t("devise.failure.already_authenticated") redirect_to after_sign_in_path_for(resource) end
Merci. Cela a aidé. J'ai créé une réponse complète de tout ce que j'ai fait ci-dessous. N'hésitez pas à ajouter des améliorations à ce sujet si vous connaissez une meilleure approche. Merci!
Merci pour vos réponses Skahlert et Ssoulless. Sauter la stratégie du gardien aidait et définir des rappels semble être une approche propre. À côté de cela, j'ai eu d'autres problèmes.
On était que mes contrôleurs de concevoir personnalisés n'ont jamais été appelés. Créa une autre question pour cela: Rails 4 - Devise_for n'utilise pas les contrôleurs personnalisés a>. La solution était que j'ai utilisé la mauvaise URL de mon formulaire d'inscription modulaire. Mon formulaire ressemble maintenant à ceci: p> alors j'ai fait comme Skahlert suggéré et supprimé le Stratégie du gardien de mon application. P> Une fois mon conçu personnalisé Tout semble fonctionner maintenant. Pourrait faire un peu de refactoring et éventuellement essayer l'approche de rappel que Ssoulless suggère dans sa réponse. P> p> Utilisateurs :: InscriptionsController
Pouvez-vous publier votre fichier
routres.rb code> s'il vous plaît?
@HUZEFABIYAWARWALA J'en ai fait cela maintenant.
J'ai essayé de la même chose que vous essayez de mettre en œuvre dans ma machine et que cela fonctionne bien, vous pouvez donc vous absorber quelque chose dans le code supplémentaire que vous avez écrit avantageux de celui du congise. Si cela est possible, veuillez supprimer le code ci-dessus et publier les contrôleurs exacts que vous avez actuellement. Ce serait plus facile à déboguer.
Pouvez-vous mettre à jour votre ligne
Guest_user (with_retry = false) .try (: détruire) code> Pour aimer ça Guest_user (with_retry = false) .Reload.try (: détruire) b>
@Khammad je peux. Le problème est cependant que cela si la déclaration
Session [: Guest_user_id] && Session [: Guest_user_id]! = Actuel_user.id code> ne devient jamais vrai actuellement. Je suppose que je dois appeler
actuel_or_guest_user code> ailleurs ailleurs, mais je ne suis pas sûr quand ou où.
Avez-vous essayé ceci: Rails: 3 Devise Signup Filtre Chain halté Cela peut fonctionner pour les rails4.