Tutorial: Integrasikan Kunci Laluan ke dalam Django (Python)

WBOY
Lepaskan: 2024-08-31 06:04:02
asal
381 orang telah melayarinya

pengenalan

Dalam panduan ini, kami akan membimbing anda melalui langkah-langkah untuk mengintegrasikan pengesahan kunci laluan ke dalam aplikasi web Python Django. Kami akan menggunakan komponen UI pertama kunci laluan Corbado, yang bersambung dengan lancar ke hujung belakang kunci laluan (termasuk pelayan WebAuthn), menjadikan proses penyepaduan mudah dan cekap.

Baca tutorial asal penuh di sini

Prasyarat Projek Passkey Django

Sebelum kita memasuki pelaksanaan, pastikan anda mempunyai pemahaman asas tentang Django, Python, HTML dan JavaScript. Kebiasaan dengan teknologi ini akan membantu anda mengikuti dengan lebih mudah.

Menyediakan Projek Django

1. Mulakan Projek Django Anda

Jika Django tidak dipasang pada mesin anda, anda boleh memasangnya dengan menjalankan arahan berikut:

pip install Django==4.2.7
Salin selepas log masuk

Seterusnya, pasang Corbado Python SDK untuk kekunci laluan:

pip install passkeys
Salin selepas log masuk

Sekarang, buat projek Django baharu:

django-admin startproject passkeys_demo
cd passkeys_demo
Salin selepas log masuk

Ini akan menjana direktori passkeys_demo yang mengandungi fail projek Django anda.

2. Konfigurasikan Pembolehubah Persekitaran

Dalam direktori projek anda, buat fail .env untuk menyimpan pembolehubah persekitaran. Anda memerlukan ID Projek dan rahsia API yang boleh anda perolehi daripada panel pembangun Corbado (anda perlu membuat projek Corbado dalam panel pembangun):

PROJECT_ID=your_project_id
API_SECRET=your_api_secret
Salin selepas log masuk

Pasang pakej django-environ untuk memuatkan pembolehubah ini ke dalam tetapan Django anda:

pip install django-environ
Salin selepas log masuk

Dalam settings.py anda, import persekitaran dan konfigurasikannya untuk membaca fail .env:

import environ

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

PROJECT_ID = env('PROJECT_ID')
API_SECRET = env('API_SECRET')
Salin selepas log masuk

3. Cipta Templat Django dengan Pengurusan Sesi

Buat direktori templat di dalam projek passkeys_demo anda. Dalam direktori ini, cipta index.html untuk halaman log masuk dan profile.html untuk halaman profil pengguna.

index.html:

<!DOCTYPE html>
<html>
  <head>
    <link
      rel="stylesheet"
      href="https://unpkg.com/@corbado/web-js@latest/dist/bundle/index.css"
    />
    <script src="https://unpkg.com/@corbado/web-js@latest/dist/bundle/index.js"></script>
  </head>
  <body>
    <script>
      (async () => {
        await Corbado.load({
          projectId: "{{ PROJECT_ID }}",
          darkMode: "off",
          setShortSessionCookie: "true",
        });
        const authElement = document.getElementById('corbado-auth');
        Corbado.mountAuthUI(authElement, {
          onLoggedIn: () => {
            window.location.href = '/profile';
          },
        });
      })();
    </script>

    <div id="corbado-auth"></div>
  </body>
</html>
profile.html:
<!DOCTYPE html>
<html>
  <head>
    <link
      rel="stylesheet"
      href="https://unpkg.com/@corbado/web-js@latest/dist/bundle/index.css"
    />
    <script src="https://unpkg.com/@corbado/web-js@latest/dist/bundle/index.js"></script>
  </head>
  <body>
    <h2>Protected Page ?</h2>
    <p>User ID: {{ USER_ID }}</p>
    <p>Name: {{ USER_NAME }}</p>
    <p>Email: {{ USER_EMAIL }}</p>
    <div id="passkey-list"></div>
    <button id="logoutButton">Logout</button>

    <script>
      (async () => {
        await Corbado.load({
          projectId: "{{ PROJECT_ID }}",
          darkMode: "off",
        });

        const passkeyListElement = document.getElementById("passkey-list");
        Corbado.mountPasskeyListUI(passkeyListElement);

        const logoutButton = document.getElementById('logoutButton');
        logoutButton.addEventListener('click', function() {
          Corbado.logout()
            .then(() => {
              window.location.replace("/");
            })
            .catch(err => {
              console.error(err);
            });
        });
      })();
    </script>
  </body>
</html>
Salin selepas log masuk

4. Cipta Django Views dan Konfigurasikan Laluan

Dalam views.py, cipta kaedah berikut untuk memaparkan halaman log masuk dan profil:

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("/")
Salin selepas log masuk

Konfigurasikan laluan dalam urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("profile/", views.profile, name="profile"),
    path('<path:unknown_path>/', lambda request, unknown_path: redirect('/'), name='fallback')
]
Salin selepas log masuk

Menjalankan Aplikasi Django

Untuk memulakan aplikasi Django anda, gunakan arahan berikut:

python manage.py runserver
Salin selepas log masuk

Lawati http://localhost:8000 dalam penyemak imbas web anda dan anda akan melihat komponen UI Corbado disepadukan dengan lancar.

Tutorial: Integrate Passkeys into Django (Python)

Kesimpulan

Panduan ini membimbing anda melalui proses menambah pengesahan berasaskan kunci laluan pada aplikasi Django menggunakan komponen Corbado. Pendekatan ini bukan sahaja meningkatkan keselamatan dengan melaksanakan pengesahan tanpa kata laluan tetapi juga memudahkan pengurusan sesi. Untuk butiran lanjut tentang keupayaan pengurusan sesi Corbado, rujuk dokumentasi rasmi.

Atas ialah kandungan terperinci Tutorial: Integrasikan Kunci Laluan ke dalam Django (Python). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!