profile.html:

Protected Page ?

User ID: {{ USER_ID }}

Name: {{ USER_NAME }}

Email: {{ USER_EMAIL }}

4.创建Django视图并配置路由

在views.py中,创建以下方法来渲染登录和个人资料页面:

from django.shortcuts import render, redirectfrom django.http import HttpResponsefrom corbado_python_sdk import Config, CorbadoSDK, SessionInterface, UserEntityfrom corbado_python_sdk.entities.session_validation_result import SessionValidationResultfrom corbado_python_sdk.generated.models.identifier import Identifierfrom passkeys_demo.settings import API_SECRET, PROJECT_IDconfig = Config(api_secret=API_SECRET, project_id=PROJECT_ID)sdk = CorbadoSDK(config=config)sessions = sdk.sessionsidentifiers = sdk.identifiersdef index(request):    context = {\\\"PROJECT_ID\\\": PROJECT_ID}    return render(request, \\\"index.html\\\", context)def profile(request):    token = request.COOKIES.get(config.short_session_cookie_name)    try:        if not token:            raise ValueError(\\\"No token found\\\")        validation_result = sessions.get_and_validate_short_session_value(short_session=token)        if validation_result.authenticated:            email_identifiers = identifiers.list_all_emails_by_user_id(                user_id=validation_result.user_id or \\\"\\\"            )            user = sessions.get_current_user(short_session=token)            context = {                \\\"PROJECT_ID\\\": PROJECT_ID,                \\\"USER_ID\\\": user.user_id,                \\\"USER_NAME\\\": user.full_name,                \\\"USER_EMAIL\\\": email_identifiers[0].value,            }            return render(request, \\\"profile.html\\\", context)        else:            return HttpResponse(\\\"You are not authenticated or have not yet confirmed your email.\\\", status=401)    except Exception as e:        print(e)        return redirect(\\\"/\\\")

在urls.py中配置路由:

from django.urls import pathfrom . import viewsurlpatterns = [    path(\\\"\\\", views.index, name=\\\"index\\\"),    path(\\\"profile/\\\", views.profile, name=\\\"profile\\\"),    path(\\'/\\', lambda request, unknown_path: redirect(\\'/\\'), name=\\'fallback\\')]

运行 Django 应用程序

要启动 Django 应用程序,请使用以下命令:

python manage.py runserver

在 Web 浏览器中访问 http://localhost:8000,您应该会看到 Corbado UI 组件无缝集成。

\\\"Tutorial:

结论

本指南引导您完成使用 Corbado 组件向 Django 应用程序添加基于密码的身份验证的过程。这种方法不仅通过实现无密码身份验证来增强安全性,而且还简化了会话管理。关于Corbado的会话管理功能的更多详细信息,请参考官方文档。

","image":"http://www.luping.net/uploads/20240831/172510056566d2f2155b68d.png","datePublished":"2024-08-31T18:36:05+08:00","dateModified":"2024-08-31T18:36:05+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 教程:将密钥集成到 Django (Python)

教程:将密钥集成到 Django (Python)

发布于2024-08-31
浏览:170

介绍

在本指南中,我们将引导您完成将密钥身份验证集成到 Python Django Web 应用程序中的步骤。我们将利用 Corbado 的密钥优先 UI 组件,该组件无缝连接到密钥后端(包括 WebAuthn 服务器),使集成过程简单而高效。

在这里阅读完整的原始教程

Django Passkey 项目先决条件

在我们开始实施之前,请确保您对 Django、Python、HTML 和 JavaScript 有基本的了解。熟悉这些技术将帮助您更轻松地跟进。

设置 Django 项目

1. 初始化您的 Django 项目

如果您的计算机上未安装 Django,您可以通过运行以下命令来安装它:

pip install Django==4.2.7

接下来,安装用于密钥的 Corbado Python SDK:

pip install passkeys

现在,创建一个新的 Django 项目:

django-admin startproject passkeys_demo
cd passkeys_demo

这将生成一个包含 Django 项目文件的 passkeys_demo 目录。

2.配置环境变量

在您的项目目录中,创建一个 .env 文件来存储环境变量。您需要一个可以从 Corbado 开发人员面板获取的项目 ID 和 API 密钥(您需要在开发人员面板中创建一个 Corbado 项目):

PROJECT_ID=your_project_id
API_SECRET=your_api_secret

安装 django-environ 包以将这些变量加载到您的 Django 设置中:

pip install django-environ

在您的settings.py中,导入environ并将其配置为读取.env文件:

import environ

env = environ.Env()
environ.Env.read_env()

PROJECT_ID = env('PROJECT_ID')
API_SECRET = env('API_SECRET')

3. 使用会话管理创建 Django 模板

在 passkeys_demo 项目中创建一个 templates 目录。在此目录中,为登录页面创建index.html,为用户配置文件页面创建profile.html。

index.html:


  
    
    
  
  
    

    
profile.html:

Protected Page ?

User ID: {{ USER_ID }}

Name: {{ USER_NAME }}

Email: {{ USER_EMAIL }}

4.创建Django视图并配置路由

在views.py中,创建以下方法来渲染登录和个人资料页面:

from django.shortcuts import render, redirect
from django.http import HttpResponse
from corbado_python_sdk import Config, CorbadoSDK, SessionInterface, UserEntity
from corbado_python_sdk.entities.session_validation_result import SessionValidationResult
from corbado_python_sdk.generated.models.identifier import Identifier

from passkeys_demo.settings import API_SECRET, PROJECT_ID

config = Config(api_secret=API_SECRET, project_id=PROJECT_ID)
sdk = CorbadoSDK(config=config)
sessions = sdk.sessions
identifiers = sdk.identifiers

def index(request):
    context = {"PROJECT_ID": PROJECT_ID}
    return render(request, "index.html", context)

def profile(request):
    token = request.COOKIES.get(config.short_session_cookie_name)
    try:
        if not token:
            raise ValueError("No token found")
        validation_result = sessions.get_and_validate_short_session_value(short_session=token)
        if validation_result.authenticated:
            email_identifiers = identifiers.list_all_emails_by_user_id(
                user_id=validation_result.user_id or ""
            )
            user = sessions.get_current_user(short_session=token)
            context = {
                "PROJECT_ID": PROJECT_ID,
                "USER_ID": user.user_id,
                "USER_NAME": user.full_name,
                "USER_EMAIL": email_identifiers[0].value,
            }
            return render(request, "profile.html", context)
        else:
            return HttpResponse("You are not authenticated or have not yet confirmed your email.", status=401)
    except Exception as e:
        print(e)
        return redirect("/")

在urls.py中配置路由:

from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("profile/", views.profile, name="profile"),
    path('/', lambda request, unknown_path: redirect('/'), name='fallback')
]

运行 Django 应用程序

要启动 Django 应用程序,请使用以下命令:

python manage.py runserver

在 Web 浏览器中访问 http://localhost:8000,您应该会看到 Corbado UI 组件无缝集成。

Tutorial: Integrate Passkeys into Django (Python)

结论

本指南引导您完成使用 Corbado 组件向 Django 应用程序添加基于密码的身份验证的过程。这种方法不仅通过实现无密码身份验证来增强安全性,而且还简化了会话管理。关于Corbado的会话管理功能的更多详细信息,请参考官方文档。

版本声明 本文转载于:https://dev.to/corbado/tutorial-integrate-passkeys-into-django-python-4bip?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-03-28
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-03-28
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-03-28
  • 如何在全高布局中有效地将Flexbox和垂直滚动结合在一起?
    如何在全高布局中有效地将Flexbox和垂直滚动结合在一起?
    在全高布局中集成flexbox和垂直滚动Traditional Flexbox Approach (Old Properties)Flexbox layouts using the old syntax (display: box) permit full-height apps with ver...
    编程 发布于2025-03-28
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-03-28
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-03-28
  • 如何配置Pytesseract以使用数字输出的单位数字识别?
    如何配置Pytesseract以使用数字输出的单位数字识别?
    Pytesseract OCR具有单位数字识别和仅数字约束 在pytesseract的上下文中,在配置tesseract以识别单位数字和限制单个数字和限制输出对数字可能会提出质疑。 To address this issue, we delve into the specifics of Te...
    编程 发布于2025-03-28
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-03-28
  • 如何在Java中执行命令提示命令,包括目录更改,包括目录更改?
    如何在Java中执行命令提示命令,包括目录更改,包括目录更改?
    在java 通过Java通过Java运行命令命令可能很具有挑战性。尽管您可能会找到打开命令提示符的代码段,但他们通常缺乏更改目录并执行其他命令的能力。 solution:使用Java使用Java,使用processBuilder。这种方法允许您:启动一个过程,然后将其标准错误重定向到其标准输出。...
    编程 发布于2025-03-28
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-03-28
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-03-28
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-03-28
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-03-28
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-03-28
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-03-28

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3