2011-02-24 18 views
15

Restful Authentication utiliza authenticate_with_http_basic, pero una búsqueda en la red puede encontrar muchas páginas sin descripción. En el http://api.rubyonrails.org/ oficial, también se puede encontrar, excepto que no hay descripción, ningún comentario, ninguna especificación.En Ruby on Rails, ¿qué hace authenticate_with_http_basic?

¿Qué hace? parece ser capaz de usar un login_name y password desde una solicitud HTTP y luego se pueden comparar con el login_name y el encrypted_password en la tabla users ... pero es así, ¿por qué no hay ni siquiera una descripción de 1 línea? ?

Respuesta

18

Este método le permite implementar autenticación http básica (del tipo en que aparece un pequeño cuadro de diálogo que solicita un nombre de usuario y una contraseña). En general, es una gran manera de limitar el acceso a un sitio de desarrollo o área de administración. Por ejemplo:

class AdminController < ApplicationController 
    before_filter :authenticate 

    def authenticate 
    authenticate_or_request_with_http_basic('Administration') do |username, password| 
     username == 'admin' && password == 'password' 
    end 
    end 
end 

Esta función ya sea hacer una solicitud para el nombre de usuario y la contraseña de autenticación HTTP básica, o después de que se ha introducido, en realidad va a comprobar si la autenticación es correcta. En otras palabras, esta función llamará al authenticate_with_http_basic o llamará al request_http_basic_authentication. Puede leer más sobre él y ver más ejemplos here. Por lo general, se llama a authenticate_or_request_with_http_basic en lugar de llamar a authenticate_with_http_basic o request_http_basic_authentication, ya que la función anterior tendrá todas las funciones apropiadas.

P.S: authenticate_with_http_basic no utiliza variables POST, usa información de encabezado para obtener el nombre de usuario y la contraseña (request.env ['HTTP_AUTHORIZATION']). Puede ver más información sobre la función de autorización here.

+0

hace 'authenticate_with_http_basic' extracto de la POST variables' 'username' y password' y eso es todo? ¿Cuál es la descripción más básica? –

+0

También agregué esto a mi publicación. En resumen, no utiliza variables POST, utiliza datos request.env del encabezado de solicitud. –

+0

¿En qué situación está el nombre de usuario y la contraseña en el encabezado HTTP? el formulario de inicio de sesión ('/ session/new' o'/login') POST a '/ session' y la variable post es como:' authenticity_token = TrtiGrt8CcDl9DiVbZLA6Yi24g% 2FQ6qazMtOgwlJqpjc% 3D & login = foo & password = 123123 & remember_me = 1 & commit = Log + in' so Pensé que el usuario de inicio de sesión es generalmente por variables POST? –

3

Algunos detalles que me habrían ahorrado tiempo si pudiera leerlos en cualquier lugar.

Jugué con él. authenticate_with_http_basic acaba de leer el usuario/pase de autenticación básica y ejecuta el bloqueo interno cuando dicha información está presente en la solicitud. Si el cliente no envía ninguna autenticación, devuelve nil. De lo contrario, devuelve lo que evalúa el bloque.

Para que pueda usar el valor de retorno para decidir si hacer request_http_basic_authentication, devolver 403 prohibido o representar contenido.

FYI, si está ejecutando esto desde un método registrado como un gancho before_action, noté que el valor de retorno de ese método no se tiene en cuenta. En el caso del método rendered algo o redirected, la acción no se ejecuta. Si el método no es render o redirect, entonces se ejecuta la acción.

HTH (hablando de los carriles 5 a quedar claro)