2013-01-17 11 views
26

Ciao, io vengo dallo sfondo di Grails e nuovo da Rails. Desidero fare l'autenticazione di base http in rail.Effettuare un'autenticazione di base Http nelle guide

Ho un codice in graal che fa l'autenticazione di base in questo modo:

def authString = "${key}:".getBytes().encodeBase64().toString() 
def conn = "http://something.net".toURL().openConnection() 
conn.setRequestProperty("Authorization", "Basic ${authString}") 

E 'lo stesso può essere fatto con le rotaie?

Grazie in anticipo.

risposta

68

Scrivi il codice qui sotto, nel dispositivo di controllo che si desidera limitare utilizzando l'autenticazione HTTP di base

http_basic_authenticate_with :name => "user", :password => "password" 
+7

[Curioso per il downvote]. Non è una buona pratica scrivere ciò che ho detto? – Nishant

+6

È perfettamente buona pratica. Sei in chiaro. – depa

1

Quando si collega endpoint HTTP protetti da autenticazione HTTP di base io di solito uso HTTParty. HTTParty è un semplice wrapper per le classi inferiori Ruby STD come net/http.

Esempio di utilizzo di HTTParty con autenticazione di base.

class Delicious 
    include HTTParty 
    base_uri 'https://api.del.icio.us/v1' 

    def initialize(u, p) 
    @auth = {username: u, password: p} 
    end 

    def recent options={} 
    options.merge!({basic_auth: @auth}) 
    self.class.get('/posts/recent', options) 
    end 
end 

delicious = Delicious.new("<username>", "<password>") 

pp delicious.recent #=> list of recent elements 

Verificare la disponibilità examples on GitHub.

0

Per la versione di rota più recente è disponibile un ASCIIcast che spiega con i passaggi l'autenticazione di base HTTP .

Il collegamento va here.

Nota a margine: Si noti che l'autenticazione di base HTTP trasmette il nome utente e la password in testo non crittografato, pertanto non utilizzare questo metodo per le applicazioni in cui è richiesto un livello di sicurezza più elevato.

+0

Il collegamento sembra essere permanentemente offline. – ThunderGuppy

12

in Ruby on Rails 4 si può facilmente applicare sito di base di autenticazione HTTP larga o per controller a seconda del contesto.

Per esempio, se avete bisogno di tutto il sito di autenticazione:

class ApplicationController < ActionController::Base 
    http_basic_authenticate_with name: "admin", password: "hunter2" 
end 

O su una base per il regolatore:

class CarsController < ApplicationController 
    http_basic_authenticate_with name: "admin", password: "hunter2" 
end 
8

ho upvoted @ risposta di Nishant ma ha voluto aggiungere un altro bocconcino. È sempre possibile impostare i filtri in modo che si applica solo a determinate azioni di controllo passando only o except in questo modo:

http_basic_authenticate_with name: "admin", password: "strongpasswordhere", only: [:admin, :new, :edit, :destroy]

o

http_basic_authenticate_with name: "admin", password: "strongpasswordhere", except: [:show]

Molto utile in molti casi.

5
# app/controllers/application_controller.rb 
    before_filter :http_basic_auth 

    def http_basic_auth 
    if ENV['HTTP_AUTH'] =~ %r{(.+)\:(.+)} 
     unless authenticate_with_http_basic { |user, password| user == $1 && password == $2 } 
     request_http_basic_authentication 
     end 
    end 
    end 

e poi basta solo bisogno di esportare la variabile d'ambiente con l'utente: Password per esempio:

export HTTP_AUTH=user:pass 

se si utilizza heroku.com:

heroku config:set HTTP_AUTH=user:pass 
Problemi correlati