2017-09-07 4 views
0

Avec Rails 5, comment rediriger un utilisateur s'il accède à ma page de connexion (/ login) et qu'il est déjà connecté? J'ai essayéComment puis-je rediriger si un utilisateur visite la page de connexion mais est déjà connecté?

class PagesController < ApplicationController 
    ... 
    def login 
    respond_to do |format| 
     if logged_in? 
     format.html { redirect_to :controller => "my_controller", :action => "index" } 
     end 
    end 
    end 

dans lequel "logged_in?" est défini dans mon fichier application_controller.rb, mais je reçois l'erreur

ActionController::UnknownFormat 

sur la ligne

respond_to do |format| 

On dirait qu'il ya probablement un moyen très simple de faire cela que je ne suis pas réaliser . De plus, je n'utilise pas d'outil, en utilisant simplement mes propres mécanismes de connexion.

Répondre

1

Vous devez ajouter un format dans le cas où l'utilisateur n'est pas connecté, en fait, vous êtes seulement redirigez si l'utilisateur est, essayez avec:

def login 
    respond_to do |format| 
    if logged_in? 
     format.html { redirect_to controller: 'my_controller', action: 'index' } 
    else 
     format.html { ... } # redirect to another place 
    end 
    end 
end 

Je pense que vous pouvez créer une méthode pour rediriger seulement si l'utilisateur n'est pas connecté, sinon, laissez-le là, je pense que maintenant j'ai votre idée. Il pourrait être dans votre contrôleur d'application et être appliquée à chaque contrôleur, comme:

before_action :require_login 

private 

def require_login 
    redirect_to some_path unless logged_in? 
end 

Et si vous souhaitez autoriser certaines actions dans certains contrôleurs à accès sans être connecté, vous pouvez utiliser un rappel skip_before_action , comme:

skip_before_action :require_login, only: :index # for instance 
+0

Merci. Existe-t-il un moyen plus simple de faire autre chose que ce que j'ai mis en place? Cela semble que je pourrais le faire via une configuration de route plutôt que tout ce code. –

+0

J'ai mis à jour la réponse, jetez un oeil. –