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.
Sistem pengesahan CollabSphere dibina dengan mengambil kira keperluan utama ini:
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) #...
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
Proses Pendaftaran
Client -> RegisterView -> UserRegistrationSerializer -> CustomUserManager.create_user() -> Database -> Send verification email -> Assign default role -> Generate JWT tokens
Apabila pengguna baharu mendaftar:
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), } })
Proses Log Masuk
Client -> LoginView -> UserLoginSerializer -> authenticate() -> JWT tokens -> Update online status -> Store device tokens -> Return user permissions
Aliran log masuk termasuk:
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'])
Keselamatan 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] )
Pengesahan JWT
Sistem menggunakan token JWT untuk akses API selamat:
refresh = RefreshToken.for_user(user) return { 'refresh': str(refresh), 'access': str(refresh.access_token) }
Sistem ini menyokong berbilang peranti bagi setiap pengguna:
device_tokens = models.JSONField(default=dict)
Ini membolehkan:
Pemisahan Kebimbangan
Langkah Keselamatan
Pengoptimuman Prestasi
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) #...
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!