簡單的方法 python-social-auth
python-social-auth 是一個簡化社交認證和授權機制的框架。它包含許多社交後端(Facebook,Twitter,Github,LinkedIn 等)
安裝
首先我們需要安裝 python-social-auth 軟體包
pip install python-social-auth
或者從 github 下載程式碼。現在是將它新增到 requirements.txt
檔案的好時機。
配置 settings.py
在 settings.py 中新增:
INSTALLED_APPS = (
...
'social.apps.django_app.default',
...
)
配置後臺
AUTHENTICATION_BACKENDS 包含我們將使用的後端,我們只需要提供我們需要的內容。
AUTHENTICATION_BACKENDS = (
'social.backends.open_id.OpenIdAuth',
'social.backends.google.GoogleOpenId',
'social.backends.google.GoogleOAuth2',
'social.backends.google.GoogleOAuth',
'social.backends.twitter.TwitterOAuth',
'social.backends.yahoo.YahooOpenId',
...
'django.contrib.auth.backends.ModelBackend',
)
你的專案 settings.py
可能還沒有 AUTHENTICATION_BACKENDS
欄位。如果是這種情況,請新增欄位。千萬不要錯過'django.contrib.auth.backends.ModelBackend',
,因為它通過使用者名稱/密碼處理登入。
如果我們使用例如 Facebook 和 Linkedin Backends,我們需要新增 API 金鑰
SOCIAL_AUTH_FACEBOOK_KEY = 'YOURFACEBOOKKEY'
SOCIAL_AUTH_FACEBOOK_SECRET = 'YOURFACEBOOKSECRET'
和
SOCIAL_AUTH_LINKEDIN_KEY = 'YOURLINKEDINKEY'
SOCIAL_AUTH_LINKEDIN_SECRET = 'YOURLINKEDINSECRET'
注意 :你可以獲取在 nedded 鍵的 Facebook 開發者和 LinkedIn 開發者和在這裡你可以看到完整的清單和他各自對 E 指定 API 金鑰及其祕密的方式。
關於金鑰的注意事項: 祕密金鑰應保密。這是一個有用的 Stack Overflow 解釋。本教程有助於學習環境變數。
TEMPLATE_CONTEXT_PROCESSORS 將有助於重定向,後端和其他東西,但一開始我們只需要這些:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
...
)
在 Django 1.8 中,如上所示設定 TEMPLATE_CONTEXT_PREPROCESSORS
已被棄用。如果你是這種情況,你將把它新增到 TEMPLATES
dict 中。你應該看一下類似的東西:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
],
},
},
]
使用自定義使用者
如果你使用自定義使用者模型並希望與其關聯,只需新增以下行(仍在 settings.py 中 )
SOCIAL_AUTH_USER_MODEL = 'somepackage.models.CustomUser'
CustomUser
是從預設使用者繼承或摘要的模型。
配置 urls.py
# if you haven't imported inlcude make sure you do so at the top of your file
from django.conf.urls import url, include
urlpatterns = patterns('',
...
url('', include('social.apps.django_app.urls', namespace='social'))
...
)
接下來需要同步資料庫以建立所需的模型:
./manage.py migrate
最後我們可以玩!
在某些模板中,你需要新增以下內容:
<a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}">Login with Facebook</a>
<a href="{% url 'social:begin' 'linkedin' %}?next={{ request.path }}">Login with Linkedin</a>
如果你使用另一個後端,只需通過後端名稱更改 facebook
。
記錄使用者
一旦你登入了使用者,你可能希望建立將其登出的功能。在某些模板中,可能在顯示登入模板的位置附近,新增以下標記:
<a href="{% url 'logout' %}">Logout</a>
要麼
<a href="/logout">Logout</a>
你將要編輯 urls.py
檔案,其程式碼類似於:
url(r'^logout/$', views.logout, name='logout'),
最後編輯 views.py 檔案,其程式碼類似於:
def logout(request):
auth_logout(request)
return redirect('/')