ホームページ > バックエンド開発 > Python チュートリアル > CollabSphere の安全な認証システムの構築パート A リアルタイム通信プラットフォーム

CollabSphere の安全な認証システムの構築パート A リアルタイム通信プラットフォーム

Mary-Kate Olsen
リリース: 2024-12-27 01:45:10
オリジナル
808 人が閲覧しました

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

安全でスケーラブルな認証システムの構築は、今日のデジタル環境におけるリアルタイム通信プラットフォームにとって極めて重要です。この記事では、Django と Django REST Framework を使用して、最新のリアルタイム コラボレーション プラットフォームである CollabSphere の認証システムを構築する方法について説明します。

システム概要

CollabSphere の認証システムは、次の重要な要件を念頭に置いて構築されています。

  • 電子メールベースの認証
  • ロールベースのアクセス制御
  • リアルタイムのユーザーステータス追跡
  • マルチデバイスのサポート
  • 安全なパスワード管理
  • メール認証

コアコンポーネント

カスタム ユーザー モデル
このシステムの中心となるのは、Django の AbstractBaseUser:
を拡張するカスタム ユーザー モデルです。

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)
    #...
ログイン後にコピー
ログイン後にコピー

ロールベースのアクセス制御
ユーザー権限を管理するために柔軟な役割システムを実装しました:

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
ログイン後にコピー

認証の流れ

登録プロセス

Client -> RegisterView -> UserRegistrationSerializer -> CustomUserManager.create_user() -> Database
                      -> Send verification email
                      -> Assign default role
                      -> Generate JWT tokens
ログイン後にコピー

新規ユーザー登録時:

  1. ユーザーが電子メール、ユーザー名、パスワードを送信します
  2. システムがデータを検証します
  3. ユーザーアカウントを作成します
  4. 確認メールを送信します
  5. デフォルトの役割を割り当てる
  6. JWT トークンを返します

登録エンドポイントの例:

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),
            }
        })
ログイン後にコピー

ログインプロセス

Client -> LoginView -> UserLoginSerializer -> authenticate() -> JWT tokens
                   -> Update online status
                   -> Store device tokens
                   -> Return user permissions
ログイン後にコピー

ログイン フローには次のものが含まれます:

  1. 電子メールとパスワードの検証
  2. 検証チェック
  3. オンラインステータス更新
  4. デバイストークン管理
  5. JWT トークンの生成

リアルタイムステータス管理

システムはユーザーのステータスをリアルタイムで追跡します:

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

ログイン後にコピー

セキュリティ機能

パスワードセキュリティ

  • カスタムパスワードの検証
  • 安全なパスワードハッシュ
  • パスワード変更の検証

メール認証

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]
    )
ログイン後にコピー

JWT 認証

システムは安全な API アクセスのために JWT トークンを使用します:

refresh = RefreshToken.for_user(user)
return {
    'refresh': str(refresh),
    'access': str(refresh.access_token)
}
ログイン後にコピー

マルチデバイスのサポート

システムはユーザーごとに複数のデバイスをサポートします:

device_tokens = models.JSONField(default=dict)
ログイン後にコピー

これにより以下が可能になります:

  • デバイス固有のプッシュ通知
  • セッション管理
  • 最後にアクティブだったデバイスの追跡

実装されたベストプラクティス

関心事の分離

  • データ構造のモデル
  • 検証用のシリアライザー
  • ビジネス ロジックのビュー

セキュリティ対策

  • メール認証
  • トークンベースの認証
  • パスワードの検証
  • ロールベースのアクセス制御

パフォーマンスの最適化

  • 効率的なデータベースクエリ
  • 選択的なフィールドの更新
  • 適切なインデックス作成

システムのテスト

認証フローをテストする方法は次のとおりです:

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)
    #...
ログイン後にコピー
ログイン後にコピー

結論

安全な認証システムを構築するには、慎重な計画と実装が必要です。 Django のベスト プラクティスに従い、適切なセキュリティ対策を実装することで、ユーザーの認証、認可、リアルタイムのステータス管理を効果的に処理する CollabSphere 用の堅牢なシステムを作成しました。

この実装の完全なコードは、GitHub リポジトリで入手できます。

以上がCollabSphere の安全な認証システムの構築パート A リアルタイム通信プラットフォームの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート