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