7
votes

Rails 4 - Devise, les utilisateurs invités provoquent une chaîne de filtres arrêtée

Je viens de commencer à travailler sur une application Rails 4 (4.2.3) où j'utilise 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.

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> xxx pré>

Si j'effectue ma session, cela fonctionne. La méthode qui gère mon utilisateur invité ressemble à ceci: p> xxx pré>

comme mentionné, la création d'utilisateurs invités semble fonctionner très bien. Mais cette logique n'arrive jamais: p> xxx pré>

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_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"


6 commentaires

Pouvez-vous publier votre fichier routres.rb 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) Pour aimer ça Guest_user (with_retry = false) .Reload.try (: détruire)


@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 ne devient jamais vrai actuellement. Je suppose que je dois appeler actuel_or_guest_user 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.


3 Réponses :


1
votes

La réponse ci-dessus manque d'explication, la méthode loggin_in n'est pas appelée parce que vous n'avez pas défini votre rappel

dans votre applicationController, vous devez définir puis définir le rappel comme si: < / p> xxx

Avez-vous essayé d'utiliser Devise-invités Gem? Il met en œuvre cette fonctionnalité, au lieu de le faire à partir de zéro ...

Cochez cette page Exemple Contrôleur qui met en œuvre la connexion client. J'espère que cela aide.


1 commentaires

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.



1
votes

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


1 commentaires

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!



1
votes

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 . La solution était que j'ai utilisé la mauvaise URL de mon formulaire d'inscription modulaire. Mon formulaire ressemble maintenant à ceci: xxx

alors j'ai fait comme Skahlert suggéré et supprimé le Stratégie du gardien de mon application.

Une fois mon conçu personnalisé Utilisateurs :: InscriptionsController Contrôleur a été appelé, j'ai décidé de remplacer l'action Créer. Ce n'est pas complètement testé, mais cela ressemble à ceci: xxx

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.


0 commentaires