简单的方法 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('/')