Tôi đang cố gắng sử dụng gói Django Social Auth để kết nối với Twitter, nhưng tôi gặp khó khăn khi hiểu chính xác cách thực hiện việc này vì tôi không thể tìm thấy bất kỳ ví dụ nào. Tôi giả định rằng Django Social Auth
là gói tốt nhất để sử dụng cho mục đích này.Làm thế nào tôi có thể sử dụng Django Social Auth để kết nối với Twitter?
tôi đã xem xét một vài ví dụ có sử dụng Facebook, và từ này đã được thêm vào phần sau đây để settings.py
tập tin của tôi:
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
Trong urls.py
Tôi đã thêm các dòng sau đây:
url('', include('social_auth.urls')),
url(r'^twitter/', twitter_app, name='twitter_app')
Và trong một tệp có tên twitter.py
Tôi đã thêm thông tin sau để tạo chế độ xem:
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))
Tôi đã sau đó tạo ra một tập tin mẫu được gọi là twitter.html
với cấu trúc sau:
{% extends "base.html" %}
{% block script %}
Login with <a href="{% url socialauth_begin 'twitter' %}">Twitter</a>
{% endblock %}
Điều này dẫn đến các thông báo lỗi sau:
Trang web tại http://example.com/twitter/done đã dẫn đến quá nhiều chuyển hướng.
Tôi bị mất một chút so với những gì tôi nên làm tổng thể. Tôi đã tạo một ứng dụng trên twitter với url trang web của tôi để tạo api/khóa bí mật. Bất kỳ lời khuyên nào về hướng tôi nên đi, hoặc liên kết đến các ví dụ làm việc sẽ được đánh giá cao.
URL để bắt đầu xác thực twitter nên được '{% url socialauth_begin "twitter" %}', không ' 'twitter_app''. Tên đó đại diện cho chương trình phụ trợ bạn định sử dụng.Ngoài ra, bạn nên bao gồm DSA 'urls.py' vào các url chính của bạn với một quy tắc như sau:' ('', include ('social_auth.urls')) '. Cài đặt này 'SOCIAL_AUTH_ENABLED_BACKENDS' không tồn tại nữa. – omab
Cảm ơn @omab Tôi đã thực hiện những thay đổi này và khi tôi nhấp vào 'mysite.com/twitter', nó chỉ đưa tôi đến một trang như thể tôi đã đăng nhập (mặc dù tôi không phải làm gì cả). – djq
thử tạo/twitter/done/page – catherine