2010-05-09 20 views

risposta

54

Rails ha un built-in aiuto per questo, è possibile inserire questo nel controller dell'applicazione:

protected 
    def authenticate 
    authenticate_or_request_with_http_basic do |username, password| 
     username == "admin" && password == "test" 
    end 
    end 

Quindi utilizzare un before_filter su qualsiasi controller che si desidera proteggere (o semplicemente bastone nel controller dell'applicazione per bloccare l'intero sito):

before_filter :authenticate 

Questo metodo funziona su Nginx e Apache, che è un ulteriore vantaggio. Tuttavia, non funziona se è abilitata la memorizzazione nella cache della pagina completa, poiché il visitatore non raggiunge mai lo stack Rails; non entrerà in funzione.

Modifica Appena notato che hai specificato il percorso/admin. Tutti i miei controller di amministrazione ereditano da un AdminController. È possibile impostare il vostro up in questo modo:

/app/controllers/admin/admin_controller.rb

class Admin::AdminController < ApplicationController 
    before_filter :authenticate 
    protected 
    def authenticate 
     authenticate_or_request_with_http_basic do |username, password| 
     username == "admin" && password == "test" 
    end 
    end 
end 

poi hanno tutti i controller di estendere il controller di amministrazione, ad esempio:

class Admin::ThingsController < Admin::AdminController 

I miei itinerari sono impostati in questo modo:

map.namespace :admin do |admin| 
    admin.resources :things 
end 

Spero che questo aiuti.

+3

impressionante .. +1 per spiegazione pulita e pulita ... –

+0

Questo è esattamente quello che stavo cercando. Grazie! –

+0

Spiegazione molto bella! – blackbiron

Problemi correlati