2010-07-16 7 views
1

Quelqu'un pourrait expliquer s'il vous plaît ce qui se passe ici? J'ai l'impression que la documentation ne mentionne pas beaucoup ou ne décrit pas ce qui se passe. il suffit de dire utiliser cette méthode comme ça. Que se passera-t-il si le nom d'utilisateur et le mot de passe sont vrais, que se passera-t-il si faux, etc.?ruby ​​sur rails 3 question à propos de before_filter

class AdminController < ApplicationController 
    USERNAME, PASSWORD = "humbaba", "5baa61e4" 

    before_filter :authenticate 

    private 

    def authenticate 
    authenticate_or_request_with_http_basic do |username, password| 
     username == USERNAME && 
     Digest::SHA1.hexdigest(password) == PASSWORD 
    end 
    end 
end 

grâce

Répondre

2

La méthode before_filter assure que la méthode privée authenticate est exécutée avant toutes les demandes.

authenticate_or_request_with_http_basic affiche le champ "Entrez votre nom d'utilisateur et mot de passe" du navigateur, et les passe dans le bloc, comme username et password, dans ce cas.

Si le bloc renvoie true (si le nom d'utilisateur et le mot de passe correspondent), la requête passe à votre code plus spécifique. Si le bloc renvoie false (le nom d'utilisateur et le mot de passe ne correspondent pas), la requête est coupée et une page d'échec d'authentification avec le code d'état HTTP correct est renvoyée. Le navigateur peut réessayer la demande plusieurs fois avant de montrer la page d'échec.

+0

« saute vers le haut du navigateur « entrez votre nom d'utilisateur et mot de passe » boîte ». Je ne comprends pas très bien. il crée une boîte que l'utilisateur tape dans l'info? ou et comment? et si elle renvoie false, quelle page sera affichée? Il y a si peu d'informations sur les détails:/ –

+2

Il existe un [protocole standard] (http://en.wikipedia.org/wiki/Basic_access_authentication) pour l'authentification via HTTP. Le navigateur affiche son propre nom d'utilisateur et mot de passe au-dessus de la page Web. Je ne suis pas sûr du contenu que Rails renvoie pour la page d'échec d'authentification, mais c'est probablement quelque chose de très générique. Avez-vous déjà essayé d'exécuter ce code pour le voir en action?C'est la meilleure façon de comprendre. – Matchu

+1

[Voici une démo pour vous montrer à quoi ressemblera l'interface de connexion.] (Http://www.pagetutor.com/keeper/http_authentication/index.html) Vous ne devriez probablement pas l'utiliser pour les applications web publiques, cependant, comme l'utilisateur moyen n'y est pas exactement habitué. – Matchu

1

La fonctionnalité d'authentification standard est intégrée dans tous les navigateurs appelés "Authentification HTTP de base". Je suis sûr que vous avez vu une boîte de dialogue de nom d'utilisateur/mot de passe générique (style dans le cadre de votre système d'exploitation) apparaître sur les pages Web. Ça y est.

Il fonctionne comme suit:

  • navigateur envoie GET demande pour une URL protégée
  • Server envoie 401 Réponse qui signifie « Autorisation requise »
  • Browser sait ce que cela signifie et affiche une boîte de dialogue à l'utilisateur avec champs utilisateur/passe
  • Lorsque l'utilisateur soumet, le navigateur envoie une autre requête GET, mais avec l'en-tête Autorisation qui contient le nom d'utilisateur et le mot de passe codés en base64
  • Se contrôles de RVer, et en cas de succès - renvoie 200 réponse de succès avec le contenu de la page demandée

Dans votre before_filter vous dire simplement Rails pour effectuer tous les ci-dessus de chant et de danse quand une action du contrôleur est accessible nulle part. Rails gère toutes les communications de protocole décrites ci-dessus pour vous.

En cas d'accès refusé, Rails renvoie la réponse 403 Interdit, et le navigateur est intégré pour le montrer.

Pour en savoir plus: http://en.wikipedia.org/wiki/Basic_access_authentication

+0

bonne explication! Merci! –