ruby-on-rails http-authentication

ruby on rails - Rails: ¿Accediendo al nombre de usuario/contraseña utilizado para la autenticación básica de HTTP?



ruby-on-rails http-authentication (2)

Estoy creando una API básica donde la información del usuario se puede recuperar después de que el inicio de sesión y la contraseña de ese usuario se envíen correctamente.

En este momento estoy usando algo como esto:

http://foo:[email protected]/api/user.xml

Entonces, lo que necesito hacer es acceder al usuario / contraseña enviado en la solicitud ( foo y bar ) pero no estoy seguro de cómo acceder a esa información en un controlador Rails.

Luego revisé esas variables a través de un User.find rápido y luego las configuré como las variables de nombre de usuario y contraseña para authenticate_or_request_with_http_basic .

Es posible que esté viendo esto de una manera completamente equivocada, pero ahí es donde estoy ahora. :)


El complemento de rieles Authlogic compatible con esta funcionalidad (y con muchas más) fuera de la caja. Puede buscar en la fuente o simplemente integrarlo en su aplicación existente.

Editar:
Después de buscar en el código fuente de Authlogic, encontré este archivo que usa el siguiente código para obtener el nombre de usuario y la contraseña:

def authenticate_with_http_basic(&block) @auth = Rack::Auth::Basic::Request.new(controller.request.env) if @auth.provided? and @auth.basic? block.call(*@auth.credentials) else false end end

Miraría un poco más allá hacia donde va todo, pero tengo que irme a la cama. Espero haber sido de alguna ayuda.


La respuesta a su pregunta de cómo obtener las credenciales de la solicitud es la siguiente:

user, pass = ActionController::HttpAuthentication::Basic::user_name_and_password(request)

Sin embargo, authenticate_or_request_with_http_basic es todo lo que necesita para realizar la autenticación básica:

class BlahController < ApplicationController before_filter :authenticate protected def authenticate authenticate_or_request_with_http_basic do |username, password| # you probably want to guard against a wrong username, and encrypt the # password but this is the idea. User.find_by_name(username).password == password end end end

authenticate_or_request_with_http_basic devolverá un estado 401 si no se proporcionan las credenciales, lo que abrirá el diálogo de nombre de usuario / contraseña en un navegador. Si se dan detalles, entonces esos se pasan al bloque proporcionado. Si el bloque devuelve verdadero la solicitud pasa. De lo contrario, el proceso de solicitud se cancela y se devuelve un estado 403 al cliente.

También puede consultar Railscast 82 (de donde proviene el código anterior): http://railscasts.com/episodes/82-http-basic-authentication