Django认证工具
项目描述
authlib 是一组用于实现无密码认证的认证工具。这可以通过通过电子邮件发送加密签名链接,或者从第三方提供者(如Google、Facebook和Twitter)获取电子邮件地址来实现。毕竟,当攻击者能够访问电子邮件地址时,为什么还需要额外要求密码进行认证,因为大多数网站上密码都可以轻松重置呢?
目标
保持小巧、简单和可扩展。
提供工具和实用程序,而不是强加框架。
用法
使用pip在虚拟环境中安装 django-authlib。
将 authlib.backends.EmailBackend 添加到 AUTHENTICATION_BAcKENDS。
将 authlib 添加到 INSTALLED_APPS 是可选的,仅当您想使用捆绑的翻译文件时才有用。没有必需的数据库表或其他类似的东西。
拥有一个用户模型,其中包含名为 email 的字段作为用户名。为了方便,authlib.base_user 模块提供了基础用户模型和经理,分别是 BaseUser 和 BaseUserManager。当您扩展 BaseUser 时,BaseUserManager 将自动作为 objects 可用。
可以使用内置视图或编写自己的视图。内置视图使用 django.contrib.messages 提供反馈,因此您可能希望检查这些消息是否对用户可见。
Google、Facebook 和 Twitter OAuth 客户端需要以下设置
GOOGLE_CLIENT_ID
GOOGLE_CLIENT_SECRET
FACEBOOK_CLIENT_ID
FACEBOOK_CLIENT_SECRET
TWITTER_CLIENT_ID
TWITTER_CLIENT_SECRET
请注意,您必须配置 Twitter 应用以允许电子邮件访问,默认情况下此功能未启用。
使用内置视图
以下 URL 模式是使用内置视图的示例。目前,您需要深入研究代码(在编写本段时,django-authlib 的 Python 代码不到 500 行)。
from django.conf.urls import url
from authlib import views
from authlib.facebook import FacebookOAuth2Client
from authlib.google import GoogleOAuth2Client
from authlib.twitter import TwitterOAuthClient
urlpatterns = [
url(
r"^login/$",
views.login,
name="login",
),
url(
r"^oauth/facebook/$",
views.oauth2,
{
"client_class": FacebookOAuth2Client,
},
name="accounts_oauth_facebook",
),
url(
r"^oauth/google/$",
views.oauth2,
{
"client_class": GoogleOAuth2Client,
},
name="accounts_oauth_google",
),
url(
r"^oauth/twitter/$",
views.oauth2,
{
"client_class": TwitterOAuthClient,
},
name="accounts_oauth_twitter",
),
url(
r"^email/$",
views.email_registration,
name="email_registration",
),
url(
r"^email/(?P<code>[^/]+)/$",
views.email_registration,
name="email_registration_confirm",
),
url(
r"^logout/$",
views.logout,
name="logout",
),
]
管理 OAuth2
authlib.admin_oauth 应用允许使用 Google OAuth2 允许具有相同电子邮件域的所有用户对 Django 的管理界面进行身份验证。为此,您必须使用 authlib 的身份验证后端(EmailBackend)。
安装方法如下
遵循上面“使用方法”部分中的步骤。
在 django.contrib.admin 之前将 authlib.admin_oauth 添加到您的 INSTALLED_APPS 中,以便选择我们的登录模板。
如上所述,将 GOOGLE_CLIENT_ID 和 GOOGLE_CLIENT_SECRET 添加到您的设置中。
添加一个 ADMIN_OAUTH_PATTERNS 设置。第一项是域名,第二项是工作人员账户的电子邮件地址。如果不存在匹配的工作人员账户,则身份验证失败
ADMIN_OAUTH_PATTERNS = [
(r"@example\.com$", "admin@example.com"),
]
添加一个到您的 URLconf 的条目
urlpatterns = [
url(r"", include("authlib.admin_oauth.urls")),
# ...
]
在您的 Google 开发者控制台中,将 https://yourdomain.com/admin/__oauth__/ 添加为有效的重定向 URI。
请注意,authlib.admin_oauth.urls 模块假定管理网站注册在 /admin/。如果不是这种情况,您可以在不同的 URL 下自己集成视图。
还可以在 ADMIN_OAUTH_PATTERNS 设置中使用可调用项而不是电子邮件地址;可调用项接收正则表达式匹配的结果。如果结果电子邮件地址不存在,则身份验证(当然)失败
ADMIN_OAUTH_PATTERNS = [
(r"^.*@example\.org$", lambda match: match[0]),
]
如果模式成功,但找不到具有工作人员访问权限的匹配用户,则处理继续到下一个模式。这意味着您可以使用个人账户(如果他们有)进行身份验证,并回退到具有您域上 Google 电子邮件地址的每个人的账户
ADMIN_OAUTH_PATTERNS = [
(r"^.*@example\.org$", lambda match: match[0]),
(r"@example\.com$", "admin@example.com"),
]
您还可以删除回退行;在这种情况下,用户只能在他们有个人工作人员账户的情况下进行身份验证。
小认证
authlib.little_auth 应用包含一个基本用户模型,其中电子邮件作为用户名,如果您不想编写自己的用户模型,但仍想从 authlib 的身份验证支持中受益,则可以使用它。
使用方法如下
将 authlib.little_auth 添加到您的 INSTALLED_APPS
设置 AUTH_USER_MODEL = "little_auth.User"
可选地,也可以遵循上述任何步骤。
电子邮件注册
要使电子邮件注册正常工作,需要两个模板
registration/email_registration_email.txt
registration/email_registration.html
起点可以是
email_registration_email.txt:
Subject (1st line)
Body (3rd line onwards)
{{ url }}
...
email_registration.html:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>
{% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}Important: {% endif %}
{{ message }}
</li>
{% endfor %}
</ul>
{% endif %}
{% if form.errors and not form.non_field_errors %}
<p class="errornote">
{% if form.errors.items|length == 1 %}
{% translate "Please correct the error below." %}
{% else %}
{% translate "Please correct the errors below." %}
{% endif %}
</p>
{% endif %}
{% if form.non_field_errors %}
{% for error in form.non_field_errors %}
<p class="errornote">
{{ error }}
</p>
{% endfor %}
{% endif %}
<form action='{% url "email_registration" %}' method="post" >
{% csrf_token %}
<table>
{{ form }}
</table>
<input type="submit" value="login">
</form>
上述模板灵感来源于
更多详细信息请参阅 相关模块。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。