2011-08-31 22 views
8

Soy relativamente nuevo con Django y su ecosistema. Estoy escribiendo la APLICACIÓN REST para nuestro cliente móvil usando django-tastypie. He revisado casi todos los ejemplos en la web sobre cómo usar tastypie para crear interfaces REST. pero ninguno de ellos es específico para PUBLICAR los datos del cliente y cómo autorizaría a un cliente.necesito un ejemplo de hacer una autorización usando django-tastypie

Utilicé el de tastypie.authentication.BasicAuthentication como se muestra en el ejemplo. Abre una ventana emergente preguntando nombre de usuario y contraseña y funciona bien en el navegador. Pero no estoy seguro, si hará lo mismo en dispositivos móviles (para ser una aplicación IOS nativa específica). No estoy obteniendo exactamente cuando un usuario hará una solicitud para iniciar sesión como se mostrará esta ventana emergente allí en su dispositivo móvil si él o ella no está usando el navegador sino la aplicación nativa.

Estoy totalmente perdido en esto, realmente agradecería su ayuda.

+0

Esto es menos específico de django y tastypie en realidad. Debería verificar si su biblioteca con la que está haciendo solicitudes POST es compatible con completar el nombre de usuario/contraseña a petición. –

+0

La pregunta es por AUTENTICACIÓN, no por AUTORIZACIÓN. – Yefei

Respuesta

0

Gracias por la ayuda.

He utilizado un enfoque similar al mencionado por @Iurii. Aquí está mi solución.

Escribí una clase para manejar la autenticación y anular el método is_authenticated. y luego puedo usar esta clase en la definición Meta de las clases de recursos de tastypie.

 

    from tastypie.authentication import BasicAuthentication 
    from tastypie.resources import Resource, ModelResource 

    # class for handling authentication 
    class MyAuthentication(BasicAuthentication): 
     def is_authenticated(self, request, **kwargs): 
      # put here the logic to check username and password from request object 
      # if the user is authenticated then return True otherwise return False 

    # tastypie resource class 
    class MyResource(ModelResource): 
     class Meta: 
      authentication = MyAuthentication() 

esto asegurará una solicitud para acceder al recurso pasará a través de su código de autenticación.

+0

puede adjuntar esos códigos de muestra para los comentarios a continuación 1. Poner aquí la lógica para verificar el nombre de usuario y la contraseña de la solicitud objecif el usuario está autenticado y luego devolver True o devolver False – sumit

+0

@ timus2001 seguro, aquí hay una de la posible solución . [Código de muestra] (http://pastebin.com/R0RnuFJs) – sanket

2

Puede consultar la fuente y utilizarla, por ejemplo, ApiKeyAuthentication. Solo tienes que enviar el nombre de usuario y la clave de acceso para autenticar al usuario.

Parece que se puede utilizar para la aplicación ios. Aquí está la parte del código de comprobación.

def is_authenticated(self, request, **kwargs): 
    """ 
    Finds the user and checks their API key. 

    Should return either ``True`` if allowed, ``False`` if not or an 
    ``HttpResponse`` if you need something custom. 
    """ 
    from django.contrib.auth.models import User 

    username = request.GET.get('username') or request.POST.get('username') 
    api_key = request.GET.get('api_key') or request.POST.get('api_key') 

    if not username or not api_key: 
     return self._unauthorized() 

    try: 
     user = User.objects.get(username=username) 
    except (User.DoesNotExist, User.MultipleObjectsReturned): 
     return self._unauthorized() 

    request.user = user 
    return self.get_key(user, api_key) 

https://github.com/toastdriven/django-tastypie/blob/master/tastypie/authentication.py#L128 https://github.com/toastdriven/django-tastypie/blob/master/tastypie/authorization.py#L42

Cuestiones relacionadas