首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过access-token进行Python社交身份验证失败

通过access-token进行Python社交身份验证失败
EN

Stack Overflow用户
提问于 2014-10-08 16:43:45
回答 1查看 2.1K关注 0票数 16

我目前正在开发一个使用Django (1.7)的服务器,它应该使用python- social -auth通过社交网络处理身份验证。我遵循了这个网站上的Tutorial,它描述了一个简单的Webapp的过程。这对于Google和Twitter的登录来说是非常有效的。

由于服务器应该只是一个REST-FULL后端,所以我决定在客户端获取访问令牌,并将其发送到服务器。然后服务器将使用它进行身份验证。这个过程应该没有问题,在python-social-auth的文档中甚至给出了一个例子。

然而,如果我真的设置了一切,我会收到一个错误:“后端找不到404”。

下面是该项目的最小部分:

settings.py:(我还包括了API_KEY和SECRET)

代码语言:javascript
复制
AUTHENTICATION_BACKENDS = (
   #'social.backends.facebook.FacebookOAuth2',
   'social.backends.google.GoogleOAuth2',
   'social.backends.twitter.TwitterOAuth',
   'django.contrib.auth.backends.ModelBackend',
)

views.py (用于身份验证视图)

代码语言:javascript
复制
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'

这是我从文档中复制的strait,只将backend.do_auth更改为request.backend.do_auth。这似乎是文档中的一个错误。

urls.py:

代码语言:javascript
复制
...
url(r'^register-by-token/(?P<backend>[^/]+)/$', 'register_by_access_token')
...

同样按照文档中的建议。

我只是尝试让它只为google-oauth工作,因为有一个简单的js-lib可以给你提供access-token。这也很好用,我发送一个请求到

代码语言:javascript
复制
GET http://localhost:8000/register-by-token/google-oauth2/<access-token>/

如上所述,返回的是一个404后端未找到。我做了一点调试,发现错误是在登录函数中引发的,而不是在后端的do_auth()函数中引发的。因此,实际的身份验证过程是有效的。我还尝试使用随机生成的字符串作为令牌,并得到相应的错误,即用户无法通过身份验证。

有趣的是,用户甚至有一个属性后端,它应该保存'social.backends.google.GoogleOAuth2‘。

如果你和我一起写了这么长的文章,谢谢你,我希望有人能知道哪里出了问题:)。期待你的回答。

EN

回答 1

Stack Overflow用户

发布于 2016-02-26 19:34:12

register_by_access_token视图中,您将在GET params中获取access_token

代码语言:javascript
复制
user = request.backend.do_auth(request.GET.get('access_token'))

你定义的url是:

代码语言:javascript
复制
url(r'^register-by-token/(?P<backend>[^/]+)/$', 'register_by_access_token')

因此,您需要请求类似以下内容:

代码语言:javascript
复制
GET http://localhost:8000/register-by-token/google-oauth2/?access_token=<access_token>

然而,您正在做的是:

代码语言:javascript
复制
GET http://localhost:8000/register-by-token/google-oauth2/<access-token>/

您在url参数中传递了access_token,这是错误的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26252633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档