介绍
认证是验证真实或注册用户身份的过程,有助于保护您的软件应用免受未经授权的访问。有几种技术用于验证用户,如用户名/密码验证、人体生物识别或图像密码。在Django Web框架中,认证处理可以是硬编码的,也可以使用现成的模块,如django-allauth、django-rest-social-auth、django-registration等。
django-allauth
是一组整合的Django应用程序,处理账户认证、注册、管理和第三方(社交)账户认证。它是最受欢迎的认证模块之一,因为它能够处理本地和社交登录。您可以通过应用的通用代码库添加对额外的OAuth/OAuth2提供商的支持。它不仅处理认证逻辑,而且可根据您的设计需求进行定制。
在本教程中,您将构建一个使用django-allauth
来认证的Django应用程序,使用DigitalOcean账户进行认证。
先决条件
在进行本教程之前,您需要:
- A DigitalOcean account. If you do not have one, sign up for a new account.
- 在您的计算机上安装Python 3.5+,您可以按照我们为您的计算机准备的教程如何安装Python 3并设置编程环境来完成。
- 对Django web框架有基本的了解,您可以在我们的Django开发系列中找到相关信息。
第1步 — 设置开发环境
在这一步中,您将设置您的Django应用程序开发环境。您将激活一个虚拟环境并安装项目的依赖项。
首先,创建一个新的目录并进入其中。本教程使用Django-Allauth
:
确保在本教程的其余部分中使用此文件夹。
接下来,使用Pipenv
创建一个虚拟环境,这是一个用于 Python 的打包工具。首先,安装pipenv
:
接下来,激活虚拟环境:
pipenv shell
然后,使用pipenv
安装你将用于开发的依赖项(django
和 django-allauth
):
现在,你已经完成了设置开发环境的步骤。接下来,你将开始开发你的 Django 应用程序。
第二步 —— 创建你的 Django 应用程序
在这一步中,你将创建一个简单的单页面 Django 应用程序,用于django-allauth
身份验证。
创建应用程序的第一步是在本教程中称为Authentication
的项目应用程序:
接下来,访问项目目录的路径并为你的应用程序创建一个应用;本教程使用main
:
在项目目录中,使用nano
或你喜欢的文本编辑器打开settings.py
进行编辑:
将main
应用程序添加到已安装应用程序列表中,如下所示:
由于我们为网站渲染了一个单页,因此不需要对models.py
文件进行更改。
接下来,打开项目的 urls.py
文件进行编辑,并进行以下更改:
urls.py
文件用于路由 Django 应用程序。
接下来,在 main
应用程序中,创建另一个 urls.py
文件,并添加以下行:
这个新的 urls.py
文件用于路由 main
应用程序的文件。
接下来,打开 views.py
文件并添加以下行:
views.py
文件用于在模板目录中呈现 home.html
页面。
接下来,在项目的根目录(Authentication
)中,创建一个名为 templates
的新目录。 在 templates
目录中,创建一个名为 home.html
的 HTML 页面,并添加以下行:
此演示网页包含在卡片中呈现的示例文本和一个登录区域,可在后续步骤中与身份验证一起使用。
该网页使用了 Materialize CDN,这是一个基于 Material Design 的免费开源内容交付前端框架。 它帮助加载 Materialize CSS、JavaScript 和 jQuery 库,以制作美观且响应式的项目。 确保您的网络连接正常,以便 CDN 加载样式文件。
从目录路径 Django-Allauth/Authentication
,使用以下命令启动 Web 应用程序:
您将看到类似以下的输出:
OutputPerforming system checks...
System check identified no issues (0 silenced).
June 10, 2022 - 13:35:20
Django version 4.0.4, using settings 'Authentication.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
导航至 URL http://127.0.0.1:8000/
。您应该会看到一个类似以下的网站:
示例网站显示占位文本,并包含底部的登录区域。一旦您设置了身份验证,您将在稍后的步骤中使用网页上的登录链接。
在此步骤中,您构建了一个单页应用程序。接下来,您将使用django-allauth
来处理身份验证。
步骤 3 — 配置django-allauth
要使用django-allauth
进行身份验证,首先必须对其进行设置。通过对项目文件进行一些更改来完成此操作。
打开Authentication/settings.py
进行编辑。在INSTALLED_APPS
下,添加以下突出显示的行以注册django-allauth
应用程序和 DigitalOcean 作为社交登录提供程序:
接下来,按照下面所示更新TEMPLATES
部分:
新行处理来自Django-Allauth
的HTTP请求。
接下来,创建一个用于AUTHENTICATION_BACKENDS
的部分,并添加以下行:
第一行用于通过Django管理仪表板以用户名登录用户,您将在稍后的步骤中执行此操作。第二行用于django-allauth
特定的身份验证方法,例如通过OAuth提供商登录。
接下来,添加两个身份验证重定向,如下所示:
这些行在身份验证后将用户重定向到主页,在网站注销后也是如此。
settings.py
的最后一次编辑是设置您站点的URL的ID。在文件末尾添加以下行:
此行指定与settings.py
文件相关联的Site
对象的数据库ID。
保存并关闭您的文件。
接下来,打开根urls.py
文件进行编辑。按如下方式添加路径到Allauth
应用:
这一新行用于路由allauth
应用的URL文件。django-allauth
应用提供了一组用于其HTML页面的URL。一些由allauth
提供的URL包括:account_login
、account_logout
、account_set_password
等等。查看django-allauth
产品文档以获取更多信息。
保存并关闭您的文件。
在这一步中,您将在应用程序上设置 django-allauth
,并准备好使用它进行身份验证。
第4步 — 添加第三方认证提供程序
在这一步中,您将使用 django-allauth
为您的Django应用程序添加第三方身份验证。您可以使用许多第三方身份验证提供程序与 django-allauth
配合使用,包括来自Google、Facebook、Twitter等的社交登录,以及 django-allauth
提供商列表 中列出的其他提供商。
在本教程中,您将使用DigitalOcean作为您的社交登录。要添加类似DigitalOcean这样的身份验证提供程序,首先您必须注册它们。
登录到您的DigitalOcean帐户,并导航到 DigitalOcean云平台,您将访问一个看起来像这样的仪表板:
点击仪表板左侧的 API 按钮,创建您的OAuth应用程序。在 应用程序和API 仪表板上,点击 OAuth应用程序 按钮,访问您网站的OAuth注册。您将看到一个看起来像这样的仪表板:
接下来,点击注册OAuth应用按钮,开始注册您的应用程序的OAuth应用。将出现一个弹出窗口:
输入项目名称(Django-Allauth
)和任何您想要的描述。对于输入主页URL部分,请输入以下任一URL:
http://127.0.0.1:8000
http://localhost:8000
在输入回调URL部分,输入以下重定向URL之一:
http://127.0.0.1:8000/accounts/digitalocean/login/callback/
http://localhost:8000/accounts/digitalocean/login/callback/
注意:出于演示目的,本教程使用localhost:8000
或127.0.0.1:8000
。在将应用部署到生产环境时,应将URL更改为包含域名。
输入项目信息后,点击注册OAuth应用以保存更改。然后,您将被重定向回应用程序的仪表板,显示创建的应用程序如下:
点击应用程序的名称以访问客户端ID和客户端密钥:
复制并保存这些详细信息以备后用。
设置完DigitalOcean上的API后,您现在可以将其添加到您的Django应用程序的管理面板中。要访问Django管理面板,您首先需要拥有超级用户,您可以使用以下命令创建:
输入请求的详细信息,然后再次运行服务器。
使用以下URL访问管理面板:http://127.0.0.1:8000/admin/
。使用超级用户详细信息登录,您将访问看起来像下面这样的管理仪表板:
在左侧面板中,点击站点,然后点击添加站点 +来编辑现有站点(example.com
)或添加一个新站点,使用http://127.0.0.1:8000
如下所示:
此配置设置了您的站点的URL服务器,数字海洋的身份验证将在其中实施。在这种情况下,它是http://127.0.0.1:8000
。
点击保存。
接下来,通过点击主页返回主仪表板。在社交账户部分,点击社交应用,然后点击添加社交应用 +。使用您从DigitalOcean控制台复制的详细信息,输入服务提供商、应用名称、客户端ID和客户端密钥等所需详细信息。在站点下,选择您刚刚在可用站点下创建的站点,并点击箭头(—>)将其移动到已选择站点面板中。点击保存按钮保存详细信息。
此配置用于通过使用客户端ID和密钥连接社交登录提供者,它们分别用作应用程序的公共标识符和机密标识符。它们用于验证您的应用程序并向DigitalOcean的API发出请求。
在这一步中,您将 DigitalOcean 配置为您的 Django 应用的第三方认证提供商。在最后一步中,您将使用您的 DigitalOcean 帐户登录您的站点。
步骤 5 —— 测试认证
在这一步中,您将使用您的 DigitalOcean 帐户登录到您的 Django 站点。首先,以管理员身份退出登录,并导航到登录页面 (http://127.0.0.1:8000/accounts/login/
):
点击 DigitalOcean 链接以使用 DigitalOcean 登录。(如屏幕截图所示,另一种认证方式是使用用户名和密码注册。)
在下一个页面,点击 继续。将出现一个新页面,您将需要选择您的 DigitalOcean 团队帐户并点击 授权应用程序 按钮。
授权是授予某人访问资源的能力的过程。在这种情况下,您正在授权您的网站访问来自 DigitalOcean 的登录凭据以对您进行身份验证。
登录后,您应该会看到您的首页如下所示:
成功登录后,您的用户名和 退出 链接将显示在网站上。
注意: 在此过程中,您可能会收到错误消息 找不到匹配的 SocialApp 查询:
这个问题通常发生在您错误地引用了您的站点ID号码,比如如果您的站点中将example.com
作为第一个站点。要解决这个问题,找到settings.py
中的SITE_ID
,并将其值逐步增加1,直到错误消失。
在这一步中,您使用DigitalOcean登录信息登录到您的站点,测试了您的认证配置。
结论
在本教程中,您构建了一个使用django-allauth
处理社交认证的Django应用程序。您集成了DigitalOcean社交登录,并通过登录到您的站点进行了测试。您可以在GitHub上访问项目代码。
作为下一步,您可以使用django-allauth
来对任何其他Django应用程序项目进行身份验证,使用django-allauth提供者中的任何一个。有关使用django-allauth
进行Django身份验证的更多信息,请查看Django-Allauth官方文档和Django官方身份验证文档。
您还可以为 allauth
页面添加样式,这些页面具有基本的默认样式。要为 allauth
页面添加样式,您可以从 GitHub 克隆 django-allauth
项目,并使用克隆存储库中的 django-allauth/allauth/templates
目录来为您的页面设置样式。