2014-07-09 27 views
5

Sto creando un'applicazione web utilizzando Django come back-end e angolare per il fronte.Django + Angular + Django-allauth

angolare è in esecuzione su una pila Yeoman su localhost:9000 mentre Django è in esecuzione su localhost:8000 e sto usando grunt-contrib-proxy per reindirizzare tutte le chiamate da $http angolare a /api alla porta Django. Ad esempio, se Angular richiede localhost:9000/api/hello, questo verrà reindirizzato a localhost:8000/api/hello e django lo servirà.

Sto pianificando di impostare Django Rest Framework per servire tutta la richiesta Angolare al percorso /api.

Fin qui tutto bene.

Ora, ho un'installazione già configurata e funzionante di Django-allauth per l'autenticazione Oauth a servizi di terze parti. Funziona con il semplice vecchio Django ma non ho idea di come farlo funzionare in collaborazione con Angular.

L'unica cosa che veniva in mente era servire le viste allauth attraverso il framework django rest, ma per quanto riguarda il reindirizzamento dopo l'autenticazione? Non posso avvolgerlo nei miei pensieri.

È meglio abbandonare questo approccio e rendere l'autenticazione Oauth direttamente dalla parte anteriore (Angolare)?

EDIT:
sono riuscito a chiamare il login vista da Angular

  • In grugnito-contrib-proxy Ho aggiunto il conto contesto e riscrivere regola:

    context: ['/api', '/accounts'], 
    rewrite: { 
        '^/api': '/api', 
        '^/account': '/accounts' 
    } 
    
  • Ho fatto una chiamata ajax da angolare, chiedendo per la vista allaluth login (ad esempio, per github): $http.get('/accounts/github/login/?process=login')

Il problema è che al mio ritorno:

XMLHttpRequest cannot load https://github.com/login/oauth/authorize?scope=&state=BlaBla&redirect…ub%2Flogin%2Fcallback%2F&response_type=code&client_id=BlaBlaBla. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access. (index):1 

(Il BlaBla è stato aggiunto da me). Penso che sto facendo qualcosa di totalmente sbagliato

+0

Hai mai avuto un problema con questo problema? Sto provando a spostare un progetto che usa la verità su angolare e questo è il mio più grande punto critico. –

+1

@FergalMoran No, mi sono arreso per ora. Sono passato a [Python Social Auth] (https://github.com/omab/python-social-auth) + [Django Rest Framework] (http://www.django-rest-framework.org/).Ho usato [questo post del blog] (http://blog.wizer.fr/2013/11/angularjs-facebook-with-a-django-rest-api/) come punto di partenza, buona fortuna! – Leonardo

+0

Grazie Leonardo, credo che sia il modo in cui dovrò andare anch'io. Quel post sul blog sembra fantastico, grazie! –

risposta

1

È necessario aggiungere un

Origin: http://localhost:9000 

all'intestazione nella richiesta che angolare manda a Django.

Assicurarsi inoltre che il server che esegue Django restituisce un

Access-Control-Allow-Origin: * 

see here for more information.