我正在创建一个web应用程序,使用Django作为后端,Angular作为前端。
Angular在localhost:9000
上运行在约曼堆栈上,而Django在localhost:8000
上运行,我使用grunt-contrib-proxy
将所有$http
调用从/api
的Angular重定向到Django端口。例如,如果Angular请求localhost:9000/api/hello
,它会被重定向到localhost:8000/api/hello
, django会提供它。
我计划将Django Rest Framework
设置为服务于/api
路径的所有Angular请求。
一切顺利。
现在,我已经配置了Django-allauth
的安装,可以对第三方服务进行Oauth
身份验证。它可以用普通的旧Django工作,但我不知道如何使它与Angular一起工作。
唯一想到的是通过django rest框架服务allauth
视图,但是认证后的重定向呢?我想不起来这件事。
放弃这种方法,直接从前端(Angular)进行Oauth认证是不是更好?
编辑:
我设法从Angular中调用login
视图
在grunt-contrib-proxy我已经添加了account上下文和重写规则:
context: ['/api', '/accounts'], rewrite: { '^/api': '/api', '^/account': '/accounts' }
我从angular做了一个ajax调用,要求allaluth登录视图(例如github):
$http.get('/accounts/github/login/?process=login')
问题是我回来了:
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
(BlaBla是我添加的)。我觉得我做错了什么
你需要添加一个
Origin: http://localhost:9000
到angular发送给Django的请求的头文件中。
还要确保Django运行的服务器返回一个
Access-Control-Allow-Origin: *