Django的SceneID身份验证
项目描述
django-sceneid
SceneID 为Django提供身份验证
如何工作
假设您的网站已经有一个现有的基于 Django身份验证框架 的登录系统。SceneID不会替代它 - 通过SceneID登录的能力将作为标准登录表单的替代方案提供。无论用户是通过SceneID还是常规用户名/密码登录,现有的用户模型都将继续使用。
“使用SceneID登录”链接将验证用户对SceneID的身份。如果SceneID账户已经与网站上(存储在数据库中sceneid.SceneID模型下)的用户账户相关联,则该用户将立即登录,并且您的网站可以像往常一样引用request.user
。否则,用户将被重定向到“连接”视图,提示他们使用现有的用户名/密码登录,或注册新账户(在这种情况下,他们将需要提供用户名和其他所需字段,但不需要密码)。在两种情况下,生成的用户账户都将与SceneID账户关联,以便他们下次可以立即登录。
演示站点(包括以下描述的大多数配置和自定义) - https://github.com/demozoo/django-sceneid-demosite
安装
django-sceneid与Django 3.x和4.x兼容。要安装
pip install django-sceneid
将'sceneid'
添加到项目的INSTALLED_APPS
中,然后运行./manage.py migrate
。
在你的项目的顶级URL配置中,包含URLconf sceneid.urls
from django.urls import include, path
urlpatterns = [
# ...
path('account/sceneid/', include('sceneid.urls')),
# ...
]
此时,你需要从scene.org获取API密钥。他们需要知道你的重定向URI,即你在上面使用并附加了login/
的路径;例如 https://demosite.example.com/account/sceneid/login/
。一旦你有了这个,请将以下设置添加到你的项目设置文件中
# The client ID you received from scene.org
SCENEID_CLIENT_ID = 'demosite'
# The client secret you received from scene.org
SCENEID_CLIENT_SECRET = 'supersecretclientsecret'
# The root URL of your website, without a trailing slash
BASE_URL = 'https://demosite.example.com'
# Where to redirect to after login (defaults to /accounts/profile/)
LOGIN_REDIRECT_URL = '/'
集成到你的网站
将“使用SceneID登录”按钮添加到你的网站的简单方法是在模板的合适位置添加sceneid_login_button_small
或sceneid_login_button_large
模板标签
{% load sceneid_tags %} {# must be at the top of your template #}
{% if not request.user.is_authenticated %}
{% sceneid_login_button_large %}
{% endif %}
这将输出一个按钮,链接到登录视图,并带有将登录后返回当前页面的“next”参数(除非当前页面是POST请求,在这种情况下将省略)。要覆盖此操作,请向标签传递一个next_url
参数 - 这可以是期望的重定向URL,或False以完全禁用它。
{% sceneid_login_button_large next_url='/some/other/path/' %}
{% sceneid_login_button_large next_url=False %}
如果你不想使用按钮图像,sceneid_auth_url
标签仅输出URL,以便将其插入到你的选择链接中。此标签也接受next_url
参数,并支持as var
语法以将结果写入变量
{% sceneid_auth_url next_url='/some/other/path/' as auth_url %}
<a href="{{ auth_url }}">Sign in with SceneID</a>
自定义
至少,你可能想自定义“连接”视图的模板以匹配你的网站样式。快速而简单的做法是在你的一个应用中创建一个路径为sceneid/connect.html
的模板,并确保该模板通过将此应用条目放置在INSTALLED_APPS
中'sceneid'
之上来优先于默认模板。此模板接收以下上下文变量
user_data
- 从SceneID返回的用户数据字典 返回,包括id
、first_name
、last_name
和display_name
login_form
- 用于登录表单的Django表单对象,将被POST到{% url 'sceneid:connect_old' %}
register_form
- 用于注册表单的Django表单对象,将被POST到{% url 'sceneid:connect_new' %}
要获得更多自定义控制,你可以覆盖sceneid
应用的AppConfig。在你的项目级配置文件夹中(即包含settings
和urls
子模块的文件夹),向apps.py
添加以下内容
from sceneid.apps import SceneIDConfig
class DemositeSceneIDConfig(SceneIDConfig):
connect_template_name = 'accounts/connect.html'
然后替换INSTALLED_APPS
中的'sceneid'
条目为AppConfig类的点路径
INSTALLED_APPS = [
# ...
'demosite.apps.DemositeSceneIDConfig',
# ...
]
然后使用connect_template_name
中指定的模板路径用于“连接”视图。
自定义表单
用于登录和注册表单的表单类也可以从AppConfig类进行配置
connect_login_form_class
(默认:'django.contrib.auth.forms.AuthenticationForm'
)connect_register_form_class
(默认:'sceneid.forms.UserCreationForm'
)
特别是,提供的UserCreationForm
可以子类化以在创建帐户时添加额外字段。例如,要包含用于包含姓名和姓氏的字段(然后填充标准Django用户模型中相应的字段)
# accounts/forms.py
from sceneid.forms import UserCreationForm as BaseUserCreationForm
class SceneIDUserCreationForm(BaseUserCreationForm):
class Meta(BaseUserCreationForm.Meta):
fields = ('username', 'first_name', 'last_name')
# demosite/apps.py
from sceneid.apps import SceneIDConfig
class DemositeSceneIDConfig(SceneIDConfig):
connect_template_name = 'accounts/connect.html'
connect_register_form_class = 'accounts.forms.SceneIDUserCreationForm'
基本UserCreationForm
类在存在时识别first_name
和last_name
字段,并从SceneID数据中预先填充这些字段,同时使用SceneID显示名称的清理版本预先填充username
字段。
使用django-sceneid
与自定义用户模型目前未经验证。基本UserCreationForm
假设存在一个'username'
字段,如果不存在(例如,如果你的网站使用电子邮件作为用户的标识符),则需要相应地进行自定义,但所有其他功能(包括登录表单)应保持不变。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
django-sceneid-0.1.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cb36f71abff769a871e7cf5c8d7b856f05cdce57ee105390dbae569930cb5804 |
|
MD5 | 1fbf17d39764f7e7a4dfba33aa26f0f3 |
|
BLAKE2b-256 | a1d9a596282d5c87a20265a28d4b998bf7b7e923dbf473677383e47cf1e9fafb |
django_sceneid-0.1.2-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 57dbdae8c96adc7aa90025a6a995ae8756c615122bc3c88cede0e3e43cc2e2a6 |
|
MD5 | 54f13e02a115bbdcfd865e26e61b39ba |
|
BLAKE2b-256 | 28237167dfd92917f1e138a1c239eec3547e1db6b8738130713c013373056a90 |