Gibt es einen Weg in Devise 1.0, der Bibliothek für Rails 2.3, nach dem Einloggen auf eine bestimmte URL und nicht auf root_url umzuleiten?Umleiten zu einer bestimmten URL nach der Anmeldung
EDIT: vergessen Devise es ist 1.0 für
Gibt es einen Weg in Devise 1.0, der Bibliothek für Rails 2.3, nach dem Einloggen auf eine bestimmte URL und nicht auf root_url umzuleiten?Umleiten zu einer bestimmten URL nach der Anmeldung
EDIT: vergessen Devise es ist 1.0 für
Ich denke, die after_sign_in_path_for
Methode in Devise ist, was Sie suchen zu erwähnen.
Definieren Sie diese Methode in Ihrem ApplicationController und es wird die Standardimplementierung von Devise außer Kraft setzen. Dies ist es, was die Dokumentation vorgibt.
Einzelheiten hier: http://rdoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:after_sign_in_path_for
Die Chancen stehen gut, dass Ihr Benutzer umgeleitet wird, bevor after_sign_in_path
aufgerufen wird. Dies geschieht, wenn der Benutzer versucht, zu einer Seite zu wechseln, die durch Authentifizierung direkt geschützt ist. Dies passiert die ganze Zeit, wenn Sie Ihre root_path
('/') durch Authentifizierung geschützt haben.
Es gibt eine Diskussion über Google Groups zu diesem Thema:
Die schnelle und schmutzige Lösung ist stored_location_for
zu überschreiben immer nil
zurückzukehren wie so:
class ApplicationController < ActionController::Base
...
private
def stored_location_for(resource_or_scope)
nil
end
def after_sign_in_path_for(resource_or_scope)
my_favorite_path
end
end
Als eine kleine Variation hierüber gebe ich nur nil von stored_location_for zurück, wenn es mit '/' übereinstimmt, was meine Standardroute ist. Auf diese Weise werden sie nur dann nach after_sign_in_path gehen, wenn sie nicht explizit versuchen, woanders hinzugehen. Ersetzen Sie dazu einfach nil durch "(location = super) == '/'? Nil: location". –
Angenommen, Sie möchten das Dashboard des Benutzers nach dem Anmelden anzeigen.
class HomesController < ApplicationController
def index
if current_user //returns nil if not logged in
@users = User.all
render :dashboard
end
end
def dashboard
@users = User.all
end
end
in routes.rb:
root :to => 'homes#index'
Wenn angemeldet, if-Block wird in Index Aktion eingegeben und dashboard.erb gemacht wird. (stellen Sie sicher, alle Variablen zu initialisieren, die von demhboard.erb in Ihrem if-Block benötigt werden) Sonst rails rendert index.erb
Ich habe vergessen, in Devise 1.0, nicht 1.1 zu erwähnen. – Pablo
after_sign_in_path_for wird überhaupt nicht auf 1.0.8 aufgerufen. – Pablo
Mit Blick auf SessionsController von Devise wird sign_in_and_redirect aufgerufen, wenn die Anmeldung erfolgreich ist. Dies leitet zum vorherigen Ort, der in der Sitzung gespeichert ist, um. Wenn kein Ort gespeichert ist, wird after_sign_in_path_for aufgerufen. Loggt sich der Benutzer von (oder über) der Homepage ein? Das könnte erklären, warum es immer dorthin zurückleitet. – Sidane