2011-08-31 17 views
8

Sono relativamente nuovo con Django e il suo ecosistema. Sto scrivendo REST API per il nostro client mobile usando django-tastypie. Ho analizzato quasi tutti gli esempi sul web su come usare tastypie per creare interfacce REST. ma nessuno di questi è specifico per il POSTing dei dati dal client e come autorizzeresti un client.ho bisogno di un esempio di autorizzazione usando django-tastypie

Ho usato il da tastypie.authentication.BasicAuthentication come mostrato nell'esempio. Apre un pop-up che richiede nome utente e password e funziona perfettamente sul browser. Ma non sono sicuro, se farà la stessa cosa su mobile (per essere specifico, app IOS nativa). Non riesco a capire quando un utente farà una richiesta per accedere a come questo popup verrà mostrato lì sul suo dispositivo mobile se lui o lei non sta usando il browser ma l'app nativa.

Sono totalmente perso su questo, ho davvero apprezzato il vostro aiuto.

+0

Questo è in realtà meno django e tasteypie specifico. Si dovrebbe verificare se la libreria che si sta facendo con le richieste POST supporta il riempimento di nome utente/password su richiesta. –

+0

La domanda è per AUTENTICAZIONE, non AUTORIZZAZIONE. – Yefei

risposta

0

Grazie per l'aiuto.

Ho usato un approccio simile menzionato da @Iurii. Ecco la mia soluzione.

Ho scritto una classe per la gestione dell'autenticazione e l'override del metodo is_authenticated. e quindi posso usare questa classe nella definizione Meta delle classi di risorse 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() 

questo garantirà una richiesta per accedere alla risorsa passerà attraverso il vostro codice di autenticazione.

+0

potete allegare questi codici campione per i commenti sotto 1.put qui la logica per controllare nome utente e password dalla richiesta objecif l'utente è autenticato quindi restituire True altrimenti restituire False – sumit

+0

@ timus2001 sicuro, ecco una delle possibili soluzioni . [Codice di esempio] (http://pastebin.com/R0RnuFJs) – sanket

2

È possibile estrarre l'origine e utilizzare ad esempio ApiKeyAuthentication. Devi solo inserire il nome utente e la chiave API per autenticare l'utente.

Sembra utilizzabile per l'app ios. Questa è la parte del codice di controllo.

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

Problemi correlati