[英]How can I use Django Social Auth to connect with Twitter?
I'm trying to use the Django Social Auth package to connect with Twitter, but I'm having difficulty understanding how exactly to do this as I can't find any examples. 我正在尝试使用Django Social Auth软件包与Twitter连接,但我很难理解如何做到这一点,因为我找不到任何例子。 I am assuming that Django Social Auth
is the best package to use for this purpose. 我假设Django Social Auth
是用于此目的的最佳软件包。
I've looked at a few examples that use Facebook, and from this have added the following to my settings.py
file: 我看了几个使用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
In urls.py
I've added the following lines: 在urls.py
我添加了以下行:
url('', include('social_auth.urls')),
url(r'^twitter/', twitter_app, name='twitter_app')
And in a file called twitter.py
I've added the following to create a view: 在一个名为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))
I've then created a template file called twitter.html
with the following structure: 然后我创建了一个名为twitter.html
的模板文件,其结构如下:
{% extends "base.html" %}
{% block script %}
Login with <a href="{% url socialauth_begin 'twitter' %}">Twitter</a>
{% endblock %}
This results in the following error message: 这会导致以下错误消息:
The webpage at http://example.com/twitter/done has resulted in too many redirects. http://example.com/twitter/done上的网页导致了太多重定向。
I'm a little bit lost as to what I should be doing overall. 关于我应该做什么,我有点迷茫。 I have created an app on twitter with my site url to generate the api/secret key. 我在twitter上用我的网站url创建了一个app来生成api / secret密钥。 Any advice on what direction I should go, or links to working examples would be greatly appreciated. 任何关于我应该去哪个方向的建议,或者对工作实例的链接都将不胜感激。
I will give you a sample and this is a customize twitter login, 我会给你一个样本,这是一个自定义的Twitter登录,
settings.py settings.py
# Twitter settings
TWITTER_KEY = 'xxxxxx'
TWITTER_SECRET = 'xxxxxxxx'
models.py models.py
class TwitterProfile(models.Model):
user = models.ForeignKey(User)
oauth_token = models.CharField(
max_length=200
)
oauth_secret = models.CharField(
max_length=200
)
screen_name = models.CharField(
max_length=50,
blank=True, null=True
)
def __unicode__(self):
return "{0}".format(self.user)
urls.py urls.py
urlpatterns = patterns('social.views',
url(
r'^twitter/login/$',
"twitter_login",
name="twitter_login"
),
url(r'^twitter/callback/$',
"twitter_callback",
name="twitter_callback"
),
)
views.py views.py
def twitter_login(request):
twitter = Twython(
twitter_token = settings.TWITTER_KEY,
twitter_secret = settings.TWITTER_SECRET,
callback_url = request.build_absolute_uri(reverse('social:twitter_callback'))
)
auth_props = twitter.get_authentication_tokens()
request.session['request_token'] = auth_props
return HttpResponseRedirect(auth_props['auth_url'])
def twitter_callback(request, redirect_url=settings.LOGIN_REDIRECT_URL):
twitter = Twython(
twitter_token = settings.TWITTER_KEY,
twitter_secret = settings.TWITTER_SECRET,
oauth_token = request.session['request_token']['oauth_token'],
oauth_token_secret = request.session['request_token']['oauth_token_secret'],
)
authorized_tokens = twitter.get_authorized_tokens()
try:
profile = TwitterProfile.objects.get(screen_name = authorized_tokens['screen_name'])
user = User.objects.get(pk=profile.user_id)
user.backend = 'django.contrib.auth.backends.ModelBackend'
if user.is_active:
auth_login(request, user)
return HttpResponseRedirect(reverse('app_name:url_name'))
else:
//failed back to login
return HttpResponseRedirect(reverse('app_name:login'))
except TwitterProfile.DoesNotExist:
screen_name = authorized_tokens['screen_name']
oauth_token = authorized_tokens['oauth_token']
oauth_token_secret = authorized_tokens['oauth_token_secret']
//create new twitter profile
//create new user here
//authenticate the new register user then login
.........
template 模板
<a href="{% url social:twitter_login %}">Twitter</a>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.