6
votes

Rails: Devise Redirect sur un emplacement stocké après la connexion ou l'inscription?

J'utilise Devise dans une application Rails J'écris et je veux laisser les utilisateurs de retourner là où ils étaient après la signature ou l'inscription.

Par exemple, si j'ai un contrôleur "Commentaires" qui est protégé par: xxx

alors je veux des utilisateurs qui cliquent sur un "commentaire maintenant!" Bouton (et sont donc redirigés vers la nouvelle action dans les commentairesController) pour vous connecter, puis disposer d'un congage les rediriger vers la nouvelle action (ou où ils étaient) dans des commentairesContrôleur, non à la racine générique de l'application, ou à un andsign_in_path générique.

regarder par le RDOC pour le congé, j'ai trouvé Cette méthode qui fait ressembler comme si Devise a au moins la capacité faire quelque chose comme ça seul, mais je ne peux pas comprendre une manière.


0 commentaires

6 Réponses :


0
votes

Je pense que par défaut Devise enregistre l'itinéraire, mais vous pouvez utiliser

sign_in_and_redirect(@user) #assuming you are sigining in that resource


2 commentaires

En utilisant avant filtrer: signe_in_and_redirect (@user) ne fonctionne pas. L'erreur donnée indique que les arguments ne peuvent pas être passés. (C'est-à-dire "caractère inattendu" ('") Comment puis-je obtenir le comportement équivalent de l'avant_filter en utilisant ce code?


Je suis en train de jouer avec et voici ce que j'ai trouvé. Premièrement, Devise stocke la première URL que vous avez frappée à l'intérieur de redirect_location_for (: utilisateur) supposant que "l'utilisateur" est votre modèle. Deuxièmement, si vous ajoutez un redirect_to redirect_location_for (: utilisateur) dans tout ce que votre contrôleur de signature est, cela devrait tous fonctionner comme la magie



9
votes

OK, alors j'ai déjà fait de plus d'expérimentation et que vous travaillez avec Kormie's Info, j'ai une solution de travail.

de ce que je peux déterminer, avant_filter authentit_user! fait Non Enregistrez l'itinéraire pour renvoyer l'utilisateur. Ce que j'ai fait était ceci:

Tout d'abord, j'ai ajouté un Extra_filter en haut de mon contrôleur xxx

alors, J'ai écrit la méthode store_location en bas du contrôleur xxx Je ne prétend pas que c'est parfait, mais cela fonctionne pour moi. (L'inconvénient de quelqu'un d'autre que de vouloir l'utiliser, c'est que cela ne prend en charge qu'un seul chemin de retour par contrôleur. C'est tout ce dont j'ai besoin pour moi-même, mais ce n'est qu'une légère amélioration sur le chemin de retour par application que j'utilisais auparavant. ) J'apprécierais vraiment les idées et les suggestions de quelqu'un d'autre.


2 commentaires

J'ai un certain code qui ressemble à ceci: session [: login_redirect] = demande.path, sauf actuellement_user


Notez que je n'utilise pas : user_return_to , car c'est déjà utilisé en interne pour concevoir des rappels de connexion Facebook. Donc, à la place de ma propre variable + check dans une personnalisation après_sign_in_path_for



0
votes

Avez-vous essayé après_sign_in_path_for ? Si vous définissez cette méthode dans votre applicationContrôleur d'application, il devrait remplacer la mise en œuvre par défaut sur une base par contrôleur.


0 commentaires

1
votes

Devise devrait faire cela seul. L'authentifié_user! Le filtre ne voulait pas non plus travailler pour moi lorsque l'itinéraire vers l'action a été défini via la méthode de mise. Quand j'ai changé cela pour entrer dans les routes.rb Devise a commencé à travailler comme prévu.


0 commentaires

1
votes

Le moyen simple de faire ceci:

# Modified from https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in
class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    stored_location_for(resource) || your_defaut_path 
  end
end


0 commentaires

0
votes

Adapté de Devise Wiki Comment:

Rediriger Retour à la page Courant Après la connexion, la déconnexion, l'inscription, la mise à jour

Redirection de la "page en cours" implique la sauvegarde de l'URL actuelle dans La session puis récupérer l'URL de la session après l'authentification de l'utilisateur / signé. Cela ne devrait vraiment être réellement effectué que pour obtenir des demandes que les autres méthodes HTTP (post, placement, correctif, suppression) ne sont pas idempotentes et ne doivent pas être répétées automatiquement.

Pour stocker l'emplacement de votre application entière utilise avant_action. Pour définir un rappel (utilisez avant_filter dans les versions de rails avant 4.0).

Cet exemple suppose que vous avez la configuration due à authentifier un utilisateur nommé de classe.

# app / contrôleurs /Application_Controller.rb< xxxxReferenceReDe_freewewewewewewew4 "https://github.com/heartcombo/devise/wiki/ HOW-TO: -% 5breDirect-Back-to-Courant-Page-Page-Sign-in, -Sign-Out, -Sign-Up, -UPDate% 5D "rel =" NOFOOL NOREFERRER "> Devise Comment: Rediriger Back à la page actuelle après connexion, déconnectez-vous, inscrivez-vous, mettez à jour


0 commentaires