اذهب إلى المحتوى

السؤال

نشر

أنا أستخدم django-rest-framework-simplejwt لتسجيل المستخدم، ومن خلال كود التالي يمكنني الحصول على refresh token و access token بدون مشكلة:

class RegistrationSerializer(serializers.ModelSerializer):
    pwd = serializers.CharField(write_only=True)
    tokens = serializers.SerializerMethodField()

    class Meta:
        model = UserProfile
        fields = ['username', 'mail', 'pwd', 'tokens']

    def get_tokens(self, user):
        user = UserProfile(
            mail=self.validated_data['mail'],
            username=self.validated_data['username']
        )
        pwd = self.validated_data['pwd']
        user.set_password(pwd)
        tokens = RefreshToken.for_user(user)
        refresh = text_type(tokens)
        access = text_type(tokens.access_token)
        data = {
            "refresh": refresh,
            "access": access
        }
        return data

    def save(self):
        user = UserProfile(
            mail=self.validated_data['mail'],
            username=self.validated_data['username']
        )
        pwd = self.validated_data['pwd']
        user.set_password(pwd)
        user.save()
        return user

المشكلة هي أنه في كل مرة أقوم فيها بإنشاء مستخدم ، يمكنني الحصول على كل من refresh token و access token ، ولكن في قاعدة البيانات لا يمكنني العثور على هذه الرموز tokens. لذا أعتقد أنني لم أقم بتخزينها ، فهل يجب علي تخزين هذه الرموز في قاعدة البيانات؟ وكيف أقوم بذلك؟

Recommended Posts

  • 1
نشر

يمكن استخدام JWT للمصادقة بدون قاعدة بيانات أو ما يسمى بـ database-less authentication. لأنه يشفر البيانات اللازمة للمصادقة في رموز tokens. حيث سيكون تطبيقك قادرًا على مصادقة المستخدمين بعد فك الرموز tokens بالبيانات المضمنة فيه.

ولكن إذا كنت تريد تخزين رموز tokens في simplejwt ، فيمكنك استخدام نموذج OutstandingingToken لتخزين الرموز في قاعدة البيانات. لكن قبل استخدام OutstandingToken، تأكد من وضع rest_framework_simplejwt.token_blacklist في قائمة INSTALLED_APPS في ملف settings.py.، كالتالي:

# Django project settings.py

# ...

INSTALLED_APPS = (
    # ...
    'rest_framework_simplejwt.token_blacklist',
    # ...
)

ثم تشغيل الأمر التالي لتعديل قاعدة البيانات:

python manage.py migrate

عندما يتم اكتشاف تطبيق token_blacklist في قائمة التطبيقات المثبتة INSTALLED_APPS ، فسيضيف Simple JWT أي رموز refresh token أو access token تم إنشاؤها إلى قائمة من الرموز outstanding tokens.

  • 0
نشر

يمكن أن يظهر هذا الخطأ نتيجة تمريرك ال token كالتالي:

token = RefreshToken(access_token)

بينما يجب عليك أن تقوم بتمريره في refresh token..

يمكنك كذلك تجربة عل blacklist لل tokens كالتالي:

#urls.py
path('/api/logout', views.BlacklistRefreshView.as_view(), name="logout"),
#view.py

from rest_framework_simplejwt.tokens import RefreshToken

class BlacklistRefreshView(APIView):
    def post(self, request)
        token = RefreshToken(request.data.get('refresh'))
        token.blacklist()
        return Response("Success")

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...