📜  Django 中的电子邮件 + 社交登录 - 分步指南(1)

📅  最后修改于: 2023-12-03 15:00:26.887000             🧑  作者: Mango

Django 中的电子邮件 + 社交登录 - 分步指南

在 Django 开发中,常常需要添加电子邮件认证和社交登录功能来提高用户体验。本文将提供一个详细的分步指南,帮助开发人员在 Django 中实现电子邮件认证和社交登录功能。

步骤1 - 安装必要的库

在 Django 中实现电子邮件认证和社交登录功能需要使用一些库,包括 Django-allauth、django-otp 和 django-phonenumber-field。可以使用以下命令在虚拟环境中安装这些库:

pip install django-allauth
pip install django-otp
pip install django-phonenumber-field
步骤2 - 配置 Django-allauth

在 Django 中实现电子邮件认证和社交登录功能,首先要配置 Django-allauth。在 Django 的 settings.py 文件中添加以下代码:

# settings.py

INSTALLED_APPS = [
    # ...
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    # providers
    'allauth.socialaccount.providers.google',
    'allauth.socialaccount.providers.facebook',
    # ...
]

AUTHENTICATION_BACKENDS = [
    # ...
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
    # ...
]

SITE_ID = 1

LOGIN_REDIRECT_URL = 'profile'
步骤3 - 配置电子邮件认证

在 Django 中实现电子邮件认证功能需要使用 Django-allauth 和 django-otp。首先添加以下代码到 settings.py 文件中:

# settings.py

# django-otp
OTP_TOTP_ISSUER = 'example.com'
OTP_TOTP_VISIBLE_TIMEOUT = 120
OTP_TOTP_DIGITS = 6

# django-allauth
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE = True

然后在 urls.py 文件中添加以下代码:

# urls.py

from allauth.account.views import LoginView, SignupView, ConfirmEmailView

urlpatterns = [
    # ...
    path('accounts/login/', LoginView.as_view(), name='account_login'),
    path('accounts/signup/', SignupView.as_view(), name='account_signup'),
    path('accounts/confirm-email/<str:key>/', ConfirmEmailView.as_view(), name='account_confirm_email'),
    # ...
]

最后需要在 templates 文件夹下创建一个 account 文件夹,并添加一个 email_confirmation_required.html 模板文件来显示确认电子邮件页面:

<!-- templates/account/email_confirmation_required.html -->

{% extends "base.html" %}

{% block content %}
  <h2>Email Confirmation Required</h2>
  <p>Please check your email to confirm your account.</p>
{% endblock %}
步骤4 - 配置社交登录

在 Django 中实现社交登录功能需要使用 Django-allauth,并在相应的社交网络中设置 OAuth 应用程序。首先在 OAuth 应用程序中设置相应的回调 URL,例如:

  • Google:http://example.com/accounts/google/login/callback/
  • Facebook:http://example.com/accounts/facebook/login/callback/

然后在 Django 的 settings.py 文件中配置 OAuth 应用程序的密钥和密码:

# settings.py

SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'APP': {
            'client_id': 'google-client-id',
            'secret': 'google-secret',
            'key': '',
        },
        'SCOPE': [
            'email',
            'profile',
            'openid',
        ],
    },
    'facebook': {
        'APP': {
            'client_id': 'facebook-client-id',
            'secret': 'facebook-secret',
            'key': '',
        },
        'SCOPE': [
            'email',
            'public_profile',
        ],
        'AUTH_PARAMS': {
            'auth_type': 'reauthenticate',
        },
        'METHOD': 'oauth2',
        'LOCALE_FUNC': lambda request: 'en_US',
        'VERIFIED_EMAIL': False,
        'VERSION': 'v10.0',
    },
}

最后在 urls.py 文件中添加以下代码:

# urls.py

from allauth.socialaccount.views import ConnectionsView, SignupView

urlpatterns = [
    # ...
    path('accounts/social/', ConnectionsView.as_view(), name='socialaccount_connections'),
    path('accounts/social/connections/', ConnectionsView.as_view(), name='socialaccount_connections'),
    path('accounts/signup/social/', SignupView.as_view(), name='socialaccount_signup'),
    # ...
]
结论

通过按照本文提供的分步指南,开发人员可以在 Django 中轻松地实现电子邮件认证和社交登录功能,提高用户体验。同时,本文也提供了必要的代码片段和模板来帮助读者更方便地实现这些功能。