5๐
โ
I will give you a sample and this is a customize twitter login,
- the name of the app is social
- pip install Twython
- create LOGIN_REDIRECT_URL, TWITTER_SECRET and 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
.........
template
<a href="{% url social:twitter_login %}">Twitter</a>
๐คcatherine
Source:stackexchange.com