如何使用Django Social Auth与Twitter连接? [英] How can I use Django Social Auth to connect with Twitter?

查看:148
本文介绍了如何使用Django Social Auth与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,


  1. 该应用的名称是社交

  2. pip install Twython

  3. 创建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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆