Estoy utilizando Autenticación básica HTTP con Rails 3.0.9 y necesito verificar si el usuario está autorizado a mostrar algunos elementos en mi html.erb archivos. ¿Cómo puedo hacer eso?Compruebe si el usuario está autorizado (Autenticación HTTP básica, Rails 3.0.9)
Respuesta
enfoque de Vitaly que parece una buena solución, pero tiene un error grave que otorga acceso de administrador a cualquier persona que intente iniciar sesión, incluso si sus credenciales son incorrectas. (Publicación de esto como una respuesta con la esperanza de que se upvoted y la gente no aceptan ciegamente la respuesta "correcta", con su fallo de seguridad)
En primer lugar, un par de pruebas funcionales (en acciones que requieren autenticación):
test "admin is set with correct credentials" do
@request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("user", "pass")
get :index
assert_response 200
assert_equal true, session[:admin]
end
test "admin isn't set with incorrect credentials" do
@request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("user", "incorrect")
get :index
assert_response 401
assert_not_equal true, session[:admin]
end
Si ejecuta esto con el código de Vitaly, la segunda prueba falla porque session[:admin]
se establece en verdadero, aunque la contraseña sea incorrecta.
Aquí está mi código para establecer adecuadamente session[:admin]
y hacer que pasen las dos pruebas:
private
def authenticate
authenticate_or_request_with_http_basic do |user_name, password|
session[:admin] = (user_name == "name" && password == "pass")
end
end
Puede hacer que el trabajo CanCan con autenticación básica, lea esta guía https://github.com/ryanb/cancan/wiki/changing-defaults, a continuación, sólo tiene que utilizar CanCan como por lo general, se puede establecer permisos basado en el nombre de usuario conectado.
Se ve bien, pero añade complejidad no es necesario. Pienso en la disponibilidad del uso de la sesión para verificar si el usuario está conectado o no. ¿Algunas ideas? – Vitaly
- 1. Autenticación HTTP condicional básica
- 2. Autenticación HTTP básica, usando python
- 3. HTTP de autenticación básica para Carpincho
- 4. EventSource y autenticación http básica
- 5. Solicitudes HTTP con autenticación básica
- 6. Autenticación HTTP básica en teléfonos Android a Rails Server
- 7. Objetivo-c autenticación básica HTTP
- 8. LWP :: agente de usuario de autenticación básica HTTP
- 9. Autenticación HTTP básica en el iPhone
- 10. ¿Puedo usar Autenticación básica HTTP con Django?
- 11. Error "HTTP/1.1 401 no autorizado" con autenticación básica en android - EWS 2010
- 12. Ajax: autenticación básica de HTTP y cookie de autenticación
- 13. XmlSlurper.parse (uri) con autenticación básica HTTP
- 14. Python urllib2, autenticación HTTP básica y tr.im
- 15. ¿Puedo usar NSURLCredentialStorage para autenticación básica HTTP?
- 16. PhoneGap FileTransfer con autenticación básica HTTP
- 17. Código JavaScript puro para autenticación básica HTTP?
- 18. Autenticación HTTP básica para un servidor Jetty
- 19. Manejar el mensaje de error no autorizado para la autenticación básica en Spring Security
- 20. Salir con la autenticación básica HTTP y el plugin restful_authentication
- 21. Compruebe si un usuario está desconectado en el dispositivo
- 22. Compruebe si el usuario está actualmente en línea (en vivo)
- 23. HTTP Error 401.3 - No autorizado
- 24. Cómo enviar encabezados CORS con Ideario si el usuario no está autorizado (respuesta 401)
- 25. HTTP/HTTPS de autenticación básica: dos puntos en el nombre de usuario
- 26. Rails 3, autenticación básica Authlogic, NGINX y HTTP no funcionan muy bien juntos
- 27. Cómo verificar si el usuario está autorizado dentro de la Acción
- 28. Formulario de acceso para autenticación básica de HTTP
- 29. ¿Cómo puedo usar la Autenticación HTTP básica en PHP?
- 30. Atascado con servidor HTTP Python con autenticación básica con BaseHTTP
Gracias, tienes razón. ¿Cómo fue que cometí ese error? Espero que mucha gente no lo afecte. Perdón por haber llegado tan tarde cambiando la respuesta correcta. No he notado la notificación. – Vitaly