2009-05-24 5 views
3

J'ai une application RoR qui utilise le plug-in d'authentification RESTful. Tout fonctionne bien. J'ai récemment activé l'authentification basée sur les cookies et cela fonctionne bien aussi. Le problème est que je veux changer la page d'atterrissage par défaut lorsque l'utilisateur est authentifié en utilisant un cookie. Je souhaite que l'utilisateur authentifié par un cookie soit redirigé vers la même page que celle où il est redirigé lors de la connexion réussie à partir du formulaire de connexion. Ils sont toujours dirigés vers l'URL de demande d'origine. Je me suis creusé la tête quand j'ai pensé que je comprenais comment cela fonctionnait et que chaque changement que je faisais semblait n'avoir aucun impact.Authentification RESTful: Perdu en essayant de faire une simple redirection sur l'authentification par cookie

Je suppose que c'est quelque chose de simple, mais il me manque évidemment. J'apprécierais toute rétroaction, des conseils ou des suggestions que vous pourriez offrir.

Répondre

0

Vous pouvez ajouter cette ligne au contrôleur de session après une connexion réussie:

redirect_to :controller => 'dashboard', :action => 'index' 
0

J'utilise Bort alors peut-être ce ne fait pas partie d'elle-même Restful_Authentication, mais il existe une méthode successful_login dans le contrôleur de sessions qui utilise ce procédé de restful_auth:

redirect_back_or_default(root_path) 

qui est défini dans authenticated_system.rb

def redirect_back_or_default(default) 
     redirect_to(session[:return_to] || default) 
     session[:return_to] = nil 
    end 
1

J'ai résolu le problème mais c'est un peu moche à mon avis. Voici ce que j'ai fait.

Dans la méthode d'authentification par cookie, j'ai défini une variable de session indiquant que la méthode de connexion au cookie a été utilisée.

def login_from_cookie 
    user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token]) 
    if user && user.remember_token? 
    session[:cookie_login] = true **# this is my addition** 
    self.current_user = user 
    handle_remember_cookie! false # freshen cookie token (keeping date) 
    self.current_user 
    end 
end 

Puis dans: before_filter set_current_user je vérifie juste pour cette variable et redirigent si elle est définie en prenant soin de définir la variable à zéro.

def set_current_user 
    Authorization.current_user = current_user 
    if session[:cookie_login] 
    redirect_to :controller => :users, :action => :search 
    session[:cookie_login] = false 
    end 
end 

Ce n'est pas joli mais cela fonctionne. Je suis définitivement ouvert à toutes les suggestions sur la façon de nettoyer cela.

+0

Ne pas rediriger à chaque demande? –

+0

une idée intéressante, mais j'appuie la question de Steven - une fois qu'un utilisateur est connecté, il sera sûrement connecté en permanence via un cookie (à chaque demande), n'est-ce pas? cela signifie-t-il qu'ils sont continuellement redirigés? Vous dites que cela fonctionne, ce qui signifie que je dois manquer quelque chose - qu'est-ce que j'ai mal compris? –

0

Ne peut pas vous avez juste vos itinéraires afin que la configuration

map.root :controller => :users, :action => :search 

Et alors un before_filter qui vérifie pour vous assurer que certains paramètres « connecté » est réglé? Ce paramètre devrait simplement être défini à chaque fois que l'utilisateur se connecte, soit via un cookie, soit par des moyens normaux. Ensuite, que l'authentification des cookies se produise ou que l'authentification normale se produise, elle ira à la page par défaut. Peut-être que je suis mal compris le problème.

+0

Je pense que l'affiche ne veut pas rediriger si elle se connecte via d'autres méthodes - seulement si elle s'est connectée via un cookie. Corrigez-moi si je me trompe. –

0

L'authentification reposée stocke l'URL d'origine qui était en cours d'accès lorsque la demande est effectuée. Tout ce que vous avez à faire est de l'empêcher de stocker cette valeur OU d'effacer cette valeur quand une authentification de cookie est effectuée, puis l'utilisateur sera redirigé vers votre page par défaut.

je ne serais probablement pas comme ça dans authenticated_system.rb

def login_from_cookie 
    user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token]) 
    if user && user.remember_token? 
    self.current_user = user 
    session[:return_to] = nil # This clears out the return value so the user will get redirected to the default path 
    handle_remember_cookie! false # freshen cookie token (keeping date) 
    self.current_user 
    end 
end 

La est session [: return_to] = nul

Ensuite, assurez-vous juste que vous avez défini votre chemin par défaut dans votre contrôleur de sessions et vous devriez être tous ensemble.Le code dans votre contrôleur de session devrait être quelque chose comme ceci:

redirect_back_or_default(the_path_you_want_to_send_them_to) 
Questions connexes