【发布时间】:2013-02-19 08:58:35
【问题描述】:
我正在尝试使用 Django Social Auth 包与 Twitter 连接,但由于找不到任何示例,我很难理解具体如何执行此操作。我假设Django Social Auth 是用于此目的的最佳包。
我查看了一些使用 Facebook 的示例,并将以下内容添加到我的 settings.py 文件中:
AUTHENTICATION_BACKENDS = (
'social_auth.backends.twitter.TwitterBackend',
'django.contrib.auth.backends.ModelBackend',
)
# overwriting default templates
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.static',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.contrib.messages.context_processors.messages',
'social_auth.context_processors.social_auth_by_type_backends',
'django.contrib.auth.context_processors.auth',
)
SOCIAL_AUTH_ENABLED_BACKENDS = ('twitter')
SOCIAL_AUTH_DEFAULT_USERNAME = 'new_social_auth_user'
# Social media login info:
TWITTER_CONSUMER_KEY = 'xxx'
TWITTER_CONSUMER_SECRET = 'xxxxxx'
# 'magic' settings
SOCIAL_AUTH_COMPLETE_URL_NAME = 'socialauth_complete'
SOCIAL_AUTH_ASSOCIATE_URL_NAME = 'associate_complete'
SOCIAL_AUTH_PIPELINE = (
'social_auth.backends.pipeline.social.social_auth_user',
'social_auth.backends.pipeline.associate.associate_by_email',
'social_auth.backends.pipeline.misc.save_status_to_session',
'social.pipeline.redirect_to_form',
'social.pipeline.username',
'social_auth.backends.pipeline.user.create_user',
'social_auth.backends.pipeline.social.associate_user',
'social_auth.backends.pipeline.social.load_extra_data',
'social_auth.backends.pipeline.user.update_user_details',
'social_auth.backends.pipeline.misc.save_status_to_session',
'social.pipeline.redirect_to_form2',
'social.pipeline.first_name',
)
SOCIAL_AUTH_FORCE_POST_DISCONNECT = True
SOCIAL_AUTH_SESSION_EXPIRATION = False
在urls.py 我添加了以下几行:
url('', include('social_auth.urls')),
url(r'^twitter/', twitter_app, name='twitter_app')
在一个名为 twitter.py 的文件中,我添加了以下内容来创建视图:
from django.contrib.auth import BACKEND_SESSION_KEY
from django.contrib.auth.models import AnonymousUser
from django.http import HttpResponse
from django.http import HttpResponseRedirect #dq
from django.shortcuts import render_to_response
from django.template.context import RequestContext
from django.views.decorators.csrf import csrf_exempt
from django.core.cache import cache
from social_auth.models import UserSocialAuth
from social_auth.views import complete as social_complete
from social_auth.utils import setting
from social_auth.backends.twitter import TwitterBackend
# twitter login
def twitter_app(request):
"""twitter login"""
if request.user.is_authenticated():
return HttpResponseRedirect('done')
else:
return render_to_response('twitter.html', {'twitter_app_id':setting('TWITTER_CONSUMER_KEY'),
'warning': request.method == 'GET'}, RequestContext(request))
然后我创建了一个名为 twitter.html 的模板文件,其结构如下:
{% extends "base.html" %}
{% block script %}
Login with <a href="{% url socialauth_begin 'twitter' %}">Twitter</a>
{% endblock %}
这会导致以下错误消息:
http://example.com/twitter/done的网页也导致了 许多重定向。
对于我应该做的整体事情,我有点迷茫。我在 twitter 上用我的网站 url 创建了一个应用程序来生成 api/secret 密钥。任何关于我应该走的方向的建议,或工作示例的链接都将不胜感激。
【问题讨论】:
-
启动推特认证的 URL 应该是
{% url socialauth_begin "twitter" %},而不是'twitter_app'。该名称代表您打算使用的后端。此外,您应该使用如下规则将 DSAurls.py包含到您的主 URL 中:('', include('social_auth.urls'))。此设置SOCIAL_AUTH_ENABLED_BACKENDS已不存在。 -
谢谢@omab 我做了这些更改,当我点击
mysite.com/twitter时,它只是将我带到一个页面,就好像我已经登录一样(即使我不需要做任何事情) . -
尝试创建 /twitter/done/ 页面
-
我现在阅读了文档,并没有说明您必须创建 twitter url 或视图。您只需将 url twitter 放入您的模板中
-
发布您的完整 urls.py,因此如果您发布的顺序与您使用的顺序一样,则永远不会达到后者,因为一切都符合初学者的第一条规则 (
url('', include('social_auth.urls')),)
标签: python django django-templates django-socialauth