如何使用Django Social Auth与Twitter连接? [英] How can I use Django Social Auth to connect with Twitter?
问题描述
我正在尝试使用 Django Social Auth 软件包连接到Twitter ,但是我很难理解如何做到这一点,因为我找不到任何例子。我假设 Django Social Auth
是用于此目的的最佳包。
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. I am assuming that Django Social Auth
is the best package to use for this purpose.
我已经看过使用Facebook的几个示例,并从中添加了以下内容到我的 settings.py
文件中:
I've looked at a few examples that use Facebook, and from this have added the following to my settings.py
file:
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
ve添加了以下行:
In urls.py
I've added the following lines:
url('', include('social_auth.urls')),
url(r'^twitter/', twitter_app, name='twitter_app')
在一个名为 twitter.py
我添加了以下内容来创建视图:
And in a file called twitter.py
I've added the following to create a view:
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然后,使用以下结构创建一个名为 twitter.html
的模板文件:
I've then created a template file called twitter.html
with the following structure:
{% extends "base.html" %}
{% block script %}
Login with <a href="{% url socialauth_begin 'twitter' %}">Twitter</a>
{% endblock %}
导致以下错误消息:
http ://example.com/twitter/done 导致了
的许多重定向。
The webpage at http://example.com/twitter/done has resulted in too many redirects.
对我应该做的整体有点失落。我已经在Twitter上创建了一个应用程序与我的网站url生成api /密钥。任何关于我应该走什么方向的建议,或链接到工作示例都将不胜感激。
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. Any advice on what direction I should go, or links to working examples would be greatly appreciated.
推荐答案
我会给你一个示例这是一个定制的twitter登录,
I will give you a sample and this is a customize twitter login,
- 该应用的名称是社交
- pip install Twython
- 创建LOGIN_REDIRECT_URL,TWITTER_SECRET和TWITTER_KEY
settings.py
# Twitter settings
TWITTER_KEY = 'xxxxxx'
TWITTER_SECRET = 'xxxxxxxx'
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
urlpatterns = patterns('social.views',
url(
r'^twitter/login/$',
"twitter_login",
name="twitter_login"
),
url(r'^twitter/callback/$',
"twitter_callback",
name="twitter_callback"
),
)
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
.........
模板
<a href="{% url social:twitter_login %}">Twitter</a>
这篇关于如何使用Django Social Auth与Twitter连接?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!