2011-10-26 14 views
7

Tengo dificultades para encontrar un tutorial sencillo sobre cómo habilitar la autenticación de token de acceso único utilizando authlogic. Hay algo de documentación, pero no es muy útil.Authlogic and Single Access Token

he añadido a mi single_access_token db, añadí esto:

single_access_allowed_request_types :any 

a mi clase Session. pero todavía no entiendo cómo se autentica a un usuario usando el parámetro de credenciales que se pasa en cada llamada. Mi require_authentication before filter realiza una comprobación estándar para current_user como este:

def current_session 
    return @current_session if @current_session 
    @current_session = Session.find 
    end 

    def current_user 
    @current_user = current_session && current_session.record 
    end 

¿Pero es eso suficiente para funcionar? El método Session.find hace la magia para iniciar sesión, el usuario se basa en mis parámetros o tengo que crear un método diferente que realmente verifique si el parámetro user_credentials está ahí y luego encuentre al usuario basado en él y luego inicie sesión en ese usuario. Estoy confundido si realmente estoy "creando" una nueva sesión cada vez que uso un SAT o si solo estoy configurando al usuario actual en un filtro anterior cada vez que se realiza una llamada API.

¡Cualquier ayuda sería increíble! ¡Gracias!

Respuesta

2

Implementé una solución single_access_token con authlogic y lo que tuve que hacer fue agregar single_access_allowed_request_types :all al modelo UserSession.

Luego agregué lo siguiente al controlador donde quería permitir la autenticación single_access_token.

def single_access_allowed? 
     ["some_action_1","some_action_2","some_action_3"].include?(action_name) 
    end 

Parece que te falta el código del controlador. Entonces, si tuviera dos acciones, "get_user_info" y "update_user_info" agregaría.

def single_access_allowed? 
     ["get_user_info","update_user_info"].include?(action_name) 
    end 
+0

Daniel, ¿esto funcionó?Si no, déjame saber qué problemas estás experimentando e intentaré ayudarte. ¡Gracias! –

3

Lo único que tenía que hacer que esto funcione fue

  • añadir un campo llamado single_access_token a mis usuarios de la tabla
  • añadir un método llamado single_access_allowed? a cada controlador donde el acceso solo debe ser permitido.

Este método se vería así:

# method for authlogic: defines for which action the single-access-token can be used 
def single_access_allowed? 
    (action_name == "deliver") || (action_name == "delivery_status") 
end 

no tenía nada que añadir en UserSessionsController o el objeto UserSession. Authlogic maneja eso para usted. Con un token de acceso único, solo se autentica una solicitud, por lo que no hay una sesión persistente. Cada solicitud debe enviar el token de acceso único. De ahí el nombre: un token para obtener un único acceso :)

Espero que esto ayude.

0

El código fuente de authlogic es la mejor documentación en el token de acceso único. This is the specific section that discusses it.

Tendrá que agregar un método privado llamado single_access_allowed? en el controlador donde está tratando de permitir el acceso de los usuarios. El token de acceso único se pasa de manera predeterminada como un parámetro codificado de URL con el nombre user_credentials. Entonces, para golpear su controlador sin iniciar sesión será /your_route/?user_credentials=xxxxxx