تایید ایمیل در django rest framework

در بسیاری از برنامه‌های وب، نیاز به تایید ایمیل کاربران برای فعال‌سازی حساب کاربری و تأیید اعتبار آن‌ها وجود دارد. در این مقاله، ما به بررسی روش‌های تایید ایمیل در Django Rest Framework (DRF) می‌پردازیم. DRF، یک فریمورک قدرتمند برای توسعه وب سرویس‌های RESTful در پایتون است.نصب و تنظیمات:ابتدا، پکیج dj-rest-auth را با استفاده از pip نصب کنید:pip install dj-rest-authسپس، dj-rest-auth را به فایل INSTALLED_APPS پروژه خود اضافه کنید:INSTALLED_APPS = [ ... 'dj_rest_auth', ... ]همچنین، تنظیمات مربوط به ایمیل و تایید ایمیل را در فایل settings.py پروژه تنظیم کنید. برای مثال:EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' # or add your SMTP configs ACCOUNT_EMAIL_VERIFICATION = 'mandatory' ACCOUNT_EMAIL_CONFIRMATION_URL = 'http://example.com/confirm-email/{key}/' # لینک تأیید ایمیل ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = 'http://example.com/login/' ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = 'http://example.com/'آپدیت URLs:برای فعال‌سازی مسیرهای مربوط به تایید ایمیل، فایل urls.py پروژه خود را به شکل زیر به‌روزرسانی کنید:from django.urls import include, path urlpatterns = [ ... path('api/', include('dj_rest_auth.urls')), path('api/registration/', include('dj_rest_auth.registration.urls')), ... ]ارسال ایمیل تأیید: پکیج dj-rest-auth به صورت خودکار ایمیل تأیید را برای هر حساب کاربری جدید ارسال می‌کند.در فایل تنظیمات، شما می‌توانید قالب ایمیل و لینک تأیید را تعیین کنید.کاربران باید بر روی لینک تأیید ایمیل که در ایمیل ارسال شده به آن‌ها قرار دارد، کلیک کنند تا حساب کاربریشان تأیید شود.پس از کلیک بر روی لینک تأیید، کاربر به یک صفحه تأیید هدایت می‌شود که نشان می‌دهد حساب کاربریشان با موفقیت تأیید شده است.این لینک به شکل زیر است:http://192.168.3.91:8000/api/auth/registration/account-confirm-email/NA:1q3ciY:dQKWk7kNbiDgvHUhmkF2n1ifqy6_ddKkyDRYmKxWts4/خب چالش اصلی همینجا هست و من مشکلی که داشتم این بود که میخواستم بجای اینکه کاربر وقتی روی لینک کلیک میکنه و صفحه ی مربوط به خود drf باز بشه، صفحه ی مربوط به فرانتی که با ری اکت نوشته شده بود باز بشه و من طبق این لینک یک ویو جدید ساختم.در واقع وقتی کاربر بر روی لینک کلیک میکند، یک کلید در انتهای url قرار دارد و ما به این کلید نیاز داریم تا بتوانیم آن را برای api دیگری در درون برنامه مان ارسال کنیم. ویو به این شکل است:from django.conf import settings from django.shortcuts import redirect class VerifyUserEmail(viewsets.GenericViewSet): queryset = User.objects.all() permission_classes = [permissions.AllowAny] def list(self, request, key): verify_url = f'{reverse('rest_verify_email')}' url = request.build_absolute_uri(verify_url) response = requests.post(url, data={&quotkey&quot: key}) if response.status_code == 200: return redirect(&quothttp://localhost:3000/auth/register/status/success/&quot) return redirect(&quothttp://localhost:3000auth/register/status/failed/&quot)و یک url برایش تعریف میکنیم. به ترتیب ها دقت کنید:path('api/auth/registration/account-confirm-email/<str:key>/', VerifyUserEmail.as_view({&quotget&quot: &quotget&quot}), name='account_confirm_email'), path('api/auth/registration/', include('dj_rest_auth.registration.urls')),تمام.فقط به نکات زیر توجه کنید:در فایل تنظیمات، شما می‌توانید آدرس‌های انتقال کاربر بعد از تأیید ایمیل را تنظیم کنید.پکیج dj-rest-auth از سیگنال‌های user_signed_up و email_confirmed برای اعتبارسنجی تایید ایمیل استفاده می‌کند.شما می‌توانید برای انجام اعمال دلخواه پس از تایید ایمیل، به این سیگنال‌ها گوش دهید و کدهای مربوطه را اضافه کنید. برای مثال، شما می‌توانید در سیگنال email_confirmed دسترسی حساب کاربری را فعال کنید یا دیگر تنظیمات مورد نیاز را انجام دهید.با اتمام این مراحل، شما قادر خواهید بود تا تایید ایمیل را در Django Rest Framework با استفاده از پکیج dj-rest-auth پیاده‌سازی کنید. این روش به شما امکان می‌دهد که کنترل بیشتری بر روی فرآیند تایید ایمیل کاربران خود داشته باشید و از امکانات django-allauth استفاده کنید که شامل قابلیت‌هایی مانند تنظیمات ارسال ایمیل، قالب‌های ایمیل سفارشی، تنظیمات لینک‌های تأیید و موارد دیگر است.اگر قسمتی از کد نامفهوم بود میتونید در ایمیل بگید یا اگه نخواستید ایمیل بزنید میتونی چت جی پی تی اون قطعه از کد رو ارسال کنید و ازش بخواید براتون توضیح بده.aranjbar1372@gmail.com