در بسیاری از برنامههای وب، نیاز به تایید ایمیل کاربران برای فعالسازی حساب کاربری و تأیید اعتبار آنها وجود دارد. در این مقاله، ما به بررسی روشهای تایید ایمیل در 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.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={"key": key}) if response.status_code == 200: return redirect("http://localhost:3000/auth/register/status/success/") return redirect("http://localhost:3000auth/register/status/failed/")
و یک url برایش تعریف میکنیم. به ترتیب ها دقت کنید:
path('api/auth/registration/account-confirm-email/<str:key>/', VerifyUserEmail.as_view({"get": "get"}), 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