Existe-t-il un moyen dans Devise 1.0, la bibliothèque de Rails 2.3, de rediriger vers une URL spécifique et non root_url après la connexion?Rediriger vers une URL spécifique après s'être connecté
EDIT: oublié de le mentionner est 1.0
DeviseExiste-t-il un moyen dans Devise 1.0, la bibliothèque de Rails 2.3, de rediriger vers une URL spécifique et non root_url après la connexion?Rediriger vers une URL spécifique après s'être connecté
EDIT: oublié de le mentionner est 1.0
DeviseJe pense que la méthode after_sign_in_path_for
en est ce que vous Concevoir cherchez.
Définissez cette méthode dans votre ApplicationController et elle devancera l'implémentation par défaut de Devise. C'est ce que la documentation spécifie à faire.
Détails ici: http://rdoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:after_sign_in_path_for
Les chances sont que votre utilisateur est redirigé avant after_sign_in_path
est appelé. Cela se produit si l'utilisateur essaie d'accéder directement à une page protégée par l'authentification. Cela arrivera tout le temps si vous avez votre root_path
('/') protégé par l'authentification.
Il y a une discussion sur les groupes Google sur ce sujet:
La solution rapide et sale est d'écraser stored_location_for
toujours revenir nil
comme ceci:
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
En légère différence, je ne renverrai que nil de l'emplacement_localisé_for s'il correspond à '/' qui est ma route par défaut. De cette façon, ils iront à after_sign_in_path seulement s'ils n'essaient pas explicitement d'aller ailleurs. Pour ce faire, remplacez simplement nil par "(location = super) == '/'? Nil: location". –
Supposons que vous souhaitiez afficher le tableau de bord de l'utilisateur après la connexion.
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
dans routes.rb:
root :to => 'homes#index'
Si connecté, si bloc est entré en action d'index et dashboard.erb est rendu. (assurez-vous d'initialiser toutes les variables, requises par dashboard.erb, dans votre if-block) Sinon rails rend index.erb
J'ai oublié de mentionner dans Devise 1.0, pas 1.1. – Pablo
after_sign_in_path_for n'est pas appelé du tout sur la version 1.0.8. – Pablo
En regardant le SessionsController de Devise, lorsque la connexion est réussie, on appelle sign_in_and_redirect. Cela redirige vers l'emplacement précédent stocké dans la session. Si aucun emplacement n'est stocké, after_sign_in_path_for est appelé. L'utilisateur se connecte-t-il depuis (ou via) la page d'accueil? Cela pourrait expliquer pourquoi il redirige toujours là-bas. – Sidane