Qualche idea su come posso rendere l'autenticazione di Sinatra HTTP solo su una pagina in un'applicazione Sinatra modulare?Mostra Autentica HTTP Sinatra Basic su una sola pagina
risposta
Aggiunta alla risposta @iain, poiché è stato richiesto l'autenticazione HTTP (presuppongo l'autenticazione di base).
class MyApp < Sinatra::Base
def authorized?
@auth ||= Rack::Auth::Basic::Request.new(request.env)
@auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == ["CUSTOM_USERNAME","SECRET_PASSWORD"]
end
def protected!
unless authorized?
response['WWW-Authenticate'] = %(Basic realm="Restricted Area")
throw(:halt, [401, "Oops... we need your login name & password\n"])
end
end
get "/protected_content" do
protected!
"in secure"
end
get "/" do
"anyone can access"
end
end
Roba buona, +1. Ti consigliamo anche di cambiare '[" CUSTOM_USERNAME "," SECRET_PASSWORD "]' in '[ENV [" CUSTOM_USERNAME "], ENV [" SECRET_PASSWORD "]]' e di caricarli nell'ambiente del server in modo che le password non vengano passate in giro nel codice e tramite il controllo del codice sorgente ecc. – iain
Ho effettivamente modificato il codice in base al valore hard coded per renderlo semplice. Ha più senso menzionarlo :). – ch4nd4n
Il commento di Vicky Chijwani è corretto, dovresti dare molte più informazioni (prendi nota!) Ma ecco una risposta.
Si potrebbe fare in diversi modi. Se si assume il metodo di autenticazione viene chiamato protected!
:
class MyApp < Sinatra::Base # assumed for all examples
get "/only-this-page-has-auth" do
protected!
"Only admin allowed!"
end
get "/this-wont-have-auth" do
"Everybody can access this"
end
end
Oppure si potrebbe usare a filter
before "/only-this-page-has-auth" do
protected!
end
get "/only-this-page-has-auth" do
"Only admin allowed!"
end
get "/this-wont-have-auth" do
"Everybody can access this"
end
Oppure, se avete intenzione di usare Sinatra::Namespace
dal sinatra-contrib gem (forse un po 'più di un uso avanzato , ma io uso questo molto come lo trovo un bel modo di fare le cose) e la pagina protetta sarebbe ora essere a "/ admin/solo-la-page-ha-auth"
namespace "/admin" do
before do
protected!
end
get "/only-this-page-has-auth" do
"Only admin allowed!"
end
end
get "/this-wont-have-auth" do
"Everybody can access this"
end
Il modo migliore è quello di utilizzare: https://rubygems.org/gems/sinatra-basic-auth La documentazione è grande:
require "sinatra"
require "sinatra/basic_auth"
# Specify your authorization logic
authorize do |username, password|
username == "john" && password == "doe"
end
# Set protected routes
protect do
get "/admin" do
"Restricted page that only admin can access"
end
end
http://www.rubydoc.info/gems/sinatra-basic-auth/0.1.0 E 'veramente semplice da usare
- 1. PHP: HTTP Basic - Disconnetti
- 2. Come scaricare una richiesta HTTP da Sinatra?
- 3. Node.js http basic auth
- 4. Sinatra e http PUT
- 5. Spring Security HTTP Basic Authentication
- 6. Basic Rails 404 Errore Pagina
- 7. Mostrare l'impaginazione con una sola pagina usando will_paginate
- 8. http basic auth con swashbuckle documentazione api
- 9. Spring Boot mostra il popup Http-Basic-Auth dopo il login fallito
- 10. Android WebView mostra una pagina vuota
- 11. Netbeans Basic Http Auth Jax-WS
- 12. Come si autentica una richiesta di WebClient?
- 13. Routing di pagina statico in Sinatra (Ruby)
- 14. urllib2 basic oddites autenticazione
- 15. Testare localmente HTTPS su Sinatra
- 16. Primefaces overlay dinamicoPannello che mostra una sola volta
- 17. Django - Più app su una pagina web?
- 18. Autentica utente basato su linux in java
- 19. come impedire l'intestazione di www-authenticate quando si utilizza la combinazione passport-http Basic + passport-local
- 20. Problema di disconnessione dell'autenticazione HTTP BASIC con Chrome
- 21. Come si autentica un server su Firebase?
- 22. È possibile aggiungere una sola istanza di ScriptManager alla pagina
- 23. Come impostare le intestazioni della risposta HTTP (cache) in un'app Sinatra ospitata su Heroku
- 24. Autentica estensione chrome tramite Facebook
- 25. convalida su una sola colonna DataGridView
- 26. Più locali su una sola linea?
- 27. Controllo multipla contiene su una sola corda
- 28. Mostra Zend_Form_Element_Radio su una riga
- 29. Come scegli il tuo server HTTP in Sinatra?
- 30. Invio dell'autenticazione di base su http
tua domanda non è chiaro. Per favore [sii univoco e aggiungi dettagli e contesto, come menzionato nelle FAQ] (http://stackoverflow.com/questions/how-to-ask), in modo che altri utenti possano aiutarti in modo efficace. –