Rumah > pembangunan bahagian belakang > Tutorial Python > Membina Sistem Pengesahan Selamat untuk Platform Komunikasi Masa Nyata Bahagian CollabSphere

Membina Sistem Pengesahan Selamat untuk Platform Komunikasi Masa Nyata Bahagian CollabSphere

Mary-Kate Olsen
Lepaskan: 2024-12-27 01:45:10
asal
806 orang telah melayarinya

Building a Secure Authentication System for CollabSphere Part A Real-Time Communication Platform

Membina sistem pengesahan yang selamat dan berskala adalah penting untuk mana-mana platform komunikasi masa nyata dalam landskap digital hari ini. Dalam artikel ini, saya akan membimbing anda melalui cara saya membina sistem pengesahan untuk CollabSphere, platform kerjasama masa nyata moden, menggunakan Rangka Kerja Django dan Django REST.

Gambaran Keseluruhan Sistem

Sistem pengesahan CollabSphere dibina dengan mengambil kira keperluan utama ini:

  • Pengesahan berasaskan e-mel
  • Kawalan akses berasaskan peranan
  • Penjejakan status pengguna masa nyata
  • Sokongan berbilang peranti
  • Pengurusan kata laluan selamat
  • Pengesahan e-mel

Komponen Teras

Model Pengguna Tersuai
Di tengah-tengah sistem ini ialah model pengguna tersuai yang memanjangkan AbstractBaseUser Django:

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    username = models.CharField(max_length=50, unique=True)
    full_name = models.CharField(max_length=255)

    # Profile fields
    avatar = models.ImageField(upload_to='avatars/', null=True)
    bio = models.TextField(max_length=500, blank=True)

    # Status tracking
    is_online = models.BooleanField(default=False)
    last_seen = models.DateTimeField(null=True)
    #...
Salin selepas log masuk
Salin selepas log masuk

Kawalan Akses Berasaskan Peranan
Saya melaksanakan sistem peranan yang fleksibel untuk mengurus kebenaran pengguna:

class Role(models.Model):
    name = models.CharField(max_length=50, unique=True)
    description = models.TextField(blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    priority = models.IntegerField(default=0)  
    custom_permissions = models.JSONField(default=dict) 

    # Define permissions for each role
    can_moderate = models.BooleanField(default=False)
    can_manage_users = models.BooleanField(default=False)
    can_manage_roles = models.BooleanField(default=False)
    can_delete_messages = models.BooleanField(default=False)
    can_ban_users = models.BooleanField(default=False)

    class Meta:
        verbose_name = _('role')
        verbose_name_plural = _('roles')
        ordering = ['-priority'] 

    def __str__(self):
        return self.name
Salin selepas log masuk

Aliran Pengesahan

Proses Pendaftaran

Client -> RegisterView -> UserRegistrationSerializer -> CustomUserManager.create_user() -> Database
                      -> Send verification email
                      -> Assign default role
                      -> Generate JWT tokens
Salin selepas log masuk

Apabila pengguna baharu mendaftar:

  1. Pengguna menyerahkan e-mel, nama pengguna dan kata laluan
  2. Sistem mengesahkan data
  3. Mencipta akaun pengguna
  4. Menghantar e-mel pengesahan
  5. Tetapkan peranan lalai
  6. Mengembalikan token JWT

Contoh titik akhir pendaftaran:

class RegisterView(generics.CreateAPIView):
    def create(self, request):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()

        # Send verification email
        user.send_verification_email()

        # Generate tokens
        refresh = RefreshToken.for_user(user)
        return Response({
            'user': UserSerializer(user).data,
            'tokens': {
                'refresh': str(refresh),
                'access': str(refresh.access_token),
            }
        })
Salin selepas log masuk

Proses Log Masuk

Client -> LoginView -> UserLoginSerializer -> authenticate() -> JWT tokens
                   -> Update online status
                   -> Store device tokens
                   -> Return user permissions
Salin selepas log masuk

Aliran log masuk termasuk:

  1. Pengesahan e-mel dan kata laluan
  2. Semakan pengesahan
  3. Kemas kini status dalam talian
  4. Pengurusan token peranti
  5. Penjanaan token JWT

Pengurusan Status Masa Nyata

Sistem menjejak status pengguna dalam masa nyata:

def update_online_status(self, status):
    self.is_online = status
    self.last_seen = timezone.now()
    self.save(update_fields=['is_online', 'last_seen'])

Salin selepas log masuk

Ciri Keselamatan

Keselamatan Kata Laluan

  • Pengesahan kata laluan tersuai
  • Hashing kata laluan selamat
  • Pengesahan penukaran kata laluan

Pengesahan E-mel

def send_verification_email(self):
    token = self.generate_verification_token()
    verification_url = f"{settings.FRONTEND_URL}/verify-email/{token}"

    send_mail(
        'Verify your email address',
        render_to_string('users/verify_email.html', {
            'user': self,
            'verification_url': verification_url
        }),
        settings.DEFAULT_FROM_EMAIL,
        [self.email]
    )
Salin selepas log masuk

Pengesahan JWT

Sistem menggunakan token JWT untuk akses API selamat:

refresh = RefreshToken.for_user(user)
return {
    'refresh': str(refresh),
    'access': str(refresh.access_token)
}
Salin selepas log masuk

Sokongan Berbilang Peranti

Sistem ini menyokong berbilang peranti bagi setiap pengguna:

device_tokens = models.JSONField(default=dict)
Salin selepas log masuk

Ini membolehkan:

  • Pemberitahuan tolak khusus peranti
  • Pengurusan sesi
  • Penjejakan peranti aktif terakhir

Amalan Terbaik Dilaksanakan

Pemisahan Kebimbangan

  • Model untuk struktur data
  • Serializers untuk pengesahan
  • Pandangan untuk logik perniagaan

Langkah Keselamatan

  • Pengesahan e-mel
  • Pengesahan berasaskan token
  • Pengesahan kata laluan
  • Kawalan akses berasaskan peranan

Pengoptimuman Prestasi

  • Pertanyaan pangkalan data yang cekap
  • Kemas kini medan terpilih
  • Pengindeksan yang betul

Menguji Sistem

Berikut ialah cara untuk menguji aliran pengesahan:

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    username = models.CharField(max_length=50, unique=True)
    full_name = models.CharField(max_length=255)

    # Profile fields
    avatar = models.ImageField(upload_to='avatars/', null=True)
    bio = models.TextField(max_length=500, blank=True)

    # Status tracking
    is_online = models.BooleanField(default=False)
    last_seen = models.DateTimeField(null=True)
    #...
Salin selepas log masuk
Salin selepas log masuk

Kesimpulan

Membina sistem pengesahan yang selamat memerlukan perancangan dan pelaksanaan yang teliti. Mengikuti amalan terbaik Django dan melaksanakan langkah keselamatan yang betul, kami telah mencipta sistem yang teguh untuk CollabSphere yang mengendalikan pengesahan pengguna, kebenaran dan pengurusan status masa nyata dengan berkesan.

Kod lengkap untuk pelaksanaan ini tersedia pada repositori GitHub.

Atas ialah kandungan terperinci Membina Sistem Pengesahan Selamat untuk Platform Komunikasi Masa Nyata Bahagian CollabSphere. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan