我目前正在开发一个服务器和Django(1.7),它应该通过使用python-social-auth来处理社交网络的身份验证。 我按照本网站上的Tutorial进行了操作,该网站描述了简单Web应用程序的过程。 这适用于Google和Twitter登录。
由于服务器应该只是一个REST-FULL后端,我决定在客户端获取Access-Token并将其发送到服务器。 服务器将通过它进行身份验证。这个过程应该没问题,甚至可以作为python-social-auth文档中的一个例子。
但是,如果我确实设置了所有内容,我将收到一条错误消息:“后端未找到404”。
这是项目的一个最小部分:
settings.py :(我还包括API_KEY和SECRET)
AUTHENTICATION_BACKENDS = (
#'social.backends.facebook.FacebookOAuth2',
'social.backends.google.GoogleOAuth2',
'social.backends.twitter.TwitterOAuth',
'django.contrib.auth.backends.ModelBackend',
)
views.py(用于身份验证视图)
from django.contrib.auth import login
from social.apps.django_app.utils import psa
@psa('social:complete')
def register_by_access_token(request, backend):
token = request.GET.get('access_token')
user = request.backend.do_auth(request.GET.get('access_token'))
if user:
login(request, user)
return 'OK'
else:
return 'ERROR'
我从文档中复制了海峡,只将backend.do_auth更改为request.backend.do_auth。这似乎是文档中的错误。
urls.py:
...
url(r'^register-by-token/(?P<backend>[^/]+)/$', 'register_by_access_token')
...
同样如文档中所述。
我只是试图让这个只适用于google-oauth,因为有一个简单的js-lib可以为你提供访问令牌。 这也很有效,我发送了一个请求
GET http://localhost:8000/register-by-token/google-oauth2/<access-token>/
如上所述,返回是未找到的404后端。 我做了一些调试,发现登录函数中引发的错误不是后端的do_auth()函数。 因此,实际的身份验证过程有效。我还尝试使用随机生成的字符串作为令牌并得到相应的错误,用户无法进行身份验证。
有趣的是,用户甚至拥有一个属性后端,它可以保留“social.backends.google.GoogleOAuth2”。
谢谢你,如果你和我一起留了很长的帖子,我希望有人知道可能出错的地方:)。 期待您的回答。
答案 0 :(得分:1)
在register_by_access_token
视图中,您将获得GET参数中的access_token
user = request.backend.do_auth(request.GET.get('access_token'))
你定义的网址是:
url(r'^register-by-token/(?P<backend>[^/]+)/$', 'register_by_access_token')
所以你需要请求类似的东西:
GET http://localhost:8000/register-by-token/google-oauth2/?access_token=<access_token>
然而,你正在做:
GET http://localhost:8000/register-by-token/google-oauth2/<access-token>/
你在url params中传递access_token,这是错误的。