3 Stimmen

Wie verwendet man session[:user.return_to] von DEVISE

Ich versuche, die session[:user.return_to] aber ohne Erfolg...

Mein Code:

def after_sign_in_path_for(resource)
  (session[:"user.return_to"].nil?) ? "/" : session[:"user.return_to"].to_s
end

Das Problem ist also: Wenn ich meine Sitzungsvariablen überprüfe, habe ich keine mit diesen Namen.

Ich möchte zu der Seite gelangen, an der ich gerade gearbeitet habe, bevor ich zur Anmeldeseite weitergeleitet werde.

3voto

Michael Fagan Punkte 86

Ich habe mit demselben Problem zu kämpfen. Ich habe eine so-so Lösung so weit wie so

In meiner application_controller.rb

  before_filter :set_page # at the top and then

  protected
  def set_page
    unless request.referer.include?('/users/sign')
      session[:return_to] = request.referer
    end
  end

Die Anweisung unless soll verhindern, dass der Benutzer zur Seite für die An- oder Abmeldung zurückkehrt. Es gefällt mir nicht, dass die URL hier fest einkodiert ist, daher würde ich gerne eine bessere Lösung sehen. Außerdem scheint es, dass before_filter nie auf einer Seite passiert, die auf die Anmeldeseite umgeleitet wird. Wenn Sie also auf etwas klicken, das eine Anmeldung erfordert, werden Sie nach der Anmeldung auf die Seite zurückgeführt, von der aus Sie auf den Link geklickt haben, und nicht auf den eigentlichen Link selbst.

3voto

Aaron K Punkte 6666

Es gibt mehrere Möglichkeiten, wie Sie dies tun können.

Mit der neuen Version von Devise (ich benutze 2.1.2) kann das Hinzufügen von before_filter :authenticate_user! zu Ihrem Controller wird dieses Verhalten automatisch für Sie eingerichtet.

Wenn Sie dies immer noch manuell einrichten möchten, können Sie den Pfad einfach in der Datei session . Devise erwartet, es zu finden in session["#{resource}_return_to"] wobei "Ressource" der Name Ihres Benutzermodells ist. Normalerweise ist das also session["user_return_to"] . Sie hatten einen Punkt '.' in Ihrer Version, der Ihre Fehler verursacht haben könnte. Außerdem ist die session akzeptiert Zeichenkettenwerte als Schlüssel, so dass keine Notwendigkeit besteht, sie zu symbolisieren.

Eine andere Möglichkeit ist das Überschreiben der after_sign_in_path_for(resource) Methode, wie Sie es getan haben. Weitere Einzelheiten dazu finden Sie in der Devise-Wiki So geht's: Nach der Anmeldung zurück zur aktuellen Seite leiten .

Da dies eine Umleitung auslöst, sollten Sie die Verwendung vollständiger URLs in Betracht ziehen.

def after_sign_in_path_for(resource)
  session["#{resource}_return_to"] || root_url
end

1voto

Jauny Punkte 840

In Ihrer ApplicationController.rb

 def after_sign_in_path_for(resource)
   sign_in_url = url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http')
   if request.referer == sign_in_url
     super
   else
     stored_location_for(resource) || request.referer || root_path
   end
 end

stored_location_for(resource) ist eine eingebaute Methode von Devise, die die Orte speichert, von denen der Benutzer kommt.

0voto

Eugenio Vargas Punkte 61

Sie müssen die Sitzungsvariable definieren, bevor Sie jemanden umleiten.

session[:url_back] = "/***

0voto

Magne Punkte 15365

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X