2008-10-10 5 views
0

Lorsque vous utilisez before_filter :login_required pour protéger une page particulière, la méthode link_to_unless_current dans le modèle de présentation d'application affiche le lien "Connexion" de la page de connexion en tant que lien hypertexte au lieu de simplement du texte. Le problème de "connexion" texte/lien se produit uniquement lorsqu'il est redirigé vers la page de connexion via la machine before_filter, sinon, la méthode link_to_unless_current fonctionne comme prévu.Rails: problème de redirection de protection de page avec link_to_unless_current

Il semble que link_to_unless_current utilise les données de l'ancienne page comme "current" au lieu de la page de connexion (lors de la redirection).

Répondre

0

Appréciez les réponses et vous pouvez dire par la nature de la question que nous sommes nouveaux sur les rails. En passant, nous avons posté la même question sur ce site: http://railsforum.com (je ne sais pas si c'est le forum officiel des rails) sans réponse pour le moment. StackOverflow semble jusqu'à présent créer une grande communauté d'assistants désireux d'atteindre les défis programmatiques.

Je pense qu'une partie du problème est que nous étions en train de mélanger des URLs reposantes avec des routes standard. La page de connexion est mappée sur la route reposante "/ login" mais la redirection de page utilise "/ sessions/new" (module d'authentification reposant de Rick Olson)

Dans application.rb, nous avons forcé le filtre à "/ login" et qui a résolu le problème:

 
before_filter :login_required 

protected 

def login_required 
    return true if logged_in? 
    session[:return_to] = request.request_uri 
    flash[:error] = "Please log in first" 
    redirect_to "/login" and return false 
end 

Commentaires sur les mérites techniques de cette approche appréciée comme il peut être utile à d'autres newbs.

Merci, Joe

+0

Le seul commentaire que je ferais est que "et retourner faux" se sent un peu moche. Étant donné que par cette étape, vous serez toujours retournerez - vous pourriez aussi bien mettre: redirect_to «/login » false Sinon tout semble bon pour moi. –

+0

Geh - juste regardé mon dernier commentaire et me suis souvenu que les commentaires ne permettent pas la mise en forme ... que "faux" devrait être sur un retour à la ligne. –

1

Vous pouvez utiliser une méthode d'aide d'itinéraire pour effectuer la redirection de la page:

redirect_to login_url 

Si une « route nommée » pour la connexion est définie (ce qui se fait en ajoutant un explicite chemin vers "/ login" dans votre fichier "config/routes.rb").

Ce chemin est en fait la même que celle générée par:

new_session_url

Pour un aperçu détaillé de routage, je suggère la Rails Routing Guide.