یاد بگیرید که چگونه با استفاده از OAuth یک سیستم ورود امن با حساب های رسانه های اجتماعی در جنگو ایجاد کنید.
احراز هویت اجتماعی راهی برای تأیید هویت یک فرد از طریق یک حساب اجتماعی به جای استفاده از رمزهای عبور است. در توسعه وب، احراز هویت کاربران بدون رمز عبور همیشه مفید است. به این ترتیب، آنها می توانند از طریق برنامه های اجتماعی مانند Google، Twitter یا GitHub وارد شوند.
فعال کردن احراز هویت اجتماعی یک راه عالی برای افزایش امنیت برنامه شما با کاهش خطر آسیبپذیریهای رایج مرتبط با رمز عبور است. همچنین تجربه کاربری برنامه شما را بهبود می بخشد زیرا کاربران نیازی به به خاطر سپردن رمزهای عبور زیادی ندارند.
احراز هویت کاربر در جنگو
جنگو یک سیستم احراز هویت پیش فرض را برای توسعه دهندگان فراهم می کند تا با آن کار کنند. با این حال، این سیستم احراز هویت از احراز هویت سنتی استفاده می کند که شامل جمع آوری دستی داده هایی مانند نام کاربری، ایمیل، رمز عبور، نام و نام خانوادگی کاربر است.
با طراحی، سیستم احراز هویت جنگو بسیار عمومی است و بسیاری از ویژگی های مورد استفاده در اکثر سیستم های احراز هویت وب امروزی را ارائه نمی دهد. برای تکمیل این موضوع، باید از بسته های شخص ثالث مانند بسته django-allauth استفاده کنید.
نحوه فعال کردن OAuth در جنگو
برای احراز هویت کاربران خود با استفاده از OAuth در یک برنامه جنگو، می توانید از بسته جنگو به نام django-allauth استفاده کنید.
Django Allauth بسته ای است که احراز هویت، ثبت نام، مدیریت حساب، و احراز هویت حساب شخص ثالث (اجتماعی) را برای پروژه جنگو شما انجام می دهد. مراحل زیر شما را به سمت راه اندازی Django Allauth برای پروژه جنگو راهنمایی می کند.
مرحله 1: نصب و راه اندازی Django-Allauth
اگر هنوز این کار را انجام نداده اید، یک محیط مجازی ایجاد کنید و django-allauth را از طریق pip نصب کنید:
pip install django-allauth
توجه داشته باشید که برای کار کردن باید از Python 3.5 یا بالاتر و Django 2.0 یا بالاتر استفاده کنید.
مرحله 2: برنامه های مورد نیاز را به Django برای Django-Allauth اضافه کنید
پس از نصب django-allauth، فایل settings.py خود را باز کنید و برنامه های زیر را به لیست INSTALLED_APPS خود اضافه کنید:
INSTALLED_APPS = [
"""
Add your other apps here
"""
# Djang Allauth configuration apps
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
در اینجا چند نکته در مورد برخی از برنامه های فوق ذکر شده است:
- برنامه allauth.socialaccount به کاربران این امکان را می دهد که از طریق برنامه های اجتماعی مانند X (تویتر سابق)، اینستاگرام، گیت هاب و غیره وارد سیستم شوند.
- برنامه django.contrib.sites یک فریمورک داخلی جنگو است که برای کار کردن جنگو-آلاوت لازم است. این برنامه توانایی مدیریت و تمایز چندین سایت را در یک پروژه جنگو فراهم می کند. با مراجعه به مستندات جنگو می توانید نحوه عملکرد آن را درک کنید.
مرحله 3: Backendهای احراز هویت را برای پروژه خود تعریف کنید
گام بعدی این است که نحوه احراز هویت کاربران خود را تعریف کنید. می توانید این کار را با پیکربندی AUTHENTICATION_BACKENDS در فایل settings.py خود انجام دهید. برای django-allauth، باید این موارد را اضافه کنید:
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
]
قطعه کد بالا دو پشتیبان احراز هویت را تعریف می کند:
- اولین مورد پیشفرض مورد استفاده جنگو است. این به کاربر اجازه می دهد بدون توجه به پیکربندی django-allauth به پنل مدیریت وارد شود.
- مورد دوم پشتوانه احراز هویت را برای django-allauth تعریف می کند.
مرحله 4: شناسه سایت خود را اضافه کنید
در فایل تنظیمات خود باید شناسه سایت خود را اضافه کنید. در اینجا یک مثال است:
SITE_ID = 1
به طور پیش فرض سایتی به نام example.com در پنل مدیریت وجود دارد. شما می توانید تصمیم بگیرید که این سایت را تغییر دهید یا یکی برای خود اضافه کنید. در هر صورت، باید وارد پنل مدیریت شوید و به اپلیکیشن Sites بروید.
برای دریافت شناسه سایت برای یک سایت جنگو، رابط خط فرمان (CLI) خود را باز کنید و این دستور را اجرا کنید:
python manage.py shell
سپس این اسکریپت را در پوسته پایتون بنویسید:
from django.contrib.sites.models import Site
current_site = Site.objects.get_current()
site_id = current_site.id
site_name = current_site.name
print("Site ID:", site_id)
print("Site Name:", site_name)
کد بالا نام سایت و همچنین شناسه آن را چاپ می کند.
مرحله 5: URL های خود را پیکربندی کنید
در فایل urls.py پروژه خود، الگوی URL را برای django-allauth پیکربندی کنید. اینطوری باید به نظر برسد:
from django.urls import path, include
urlpatterns = [
# Djang-allauth url pattern
path('accounts/', include('allauth.urls')),
]
با این تنظیمات، می توانید سرور توسعه خود را راه اندازی کنید و به http://127.0.0.1:8000/accounts/ بروید. اگر DEBUG را روی True تنظیم کرده اید، باید لیستی از الگوهای URL موجود برای django-allauth را ببینید.
اگر موارد فوق را انجام داده اید، پروژه شما باید برای احراز هویت اجتماعی آماده باشد.
نحوه پیاده سازی ورود/ثبت نام گوگل در برنامه جنگو
پس از راه اندازی django-allauth، باید آماده باشید که به کاربران خود اجازه دهید با حساب های اجتماعی خود مانند Google احراز هویت کنند.
مرحله 1: ارائه دهنده حساب اجتماعی خود را در برنامه های نصب شده خود ثبت کنید
در فایل settings.py خود، باید ارائهدهنده حساب اجتماعی را در INSTALLED_APPS اضافه کنید. در این مورد گوگل است. گزینه های دیگر اینستاگرام، X و غیره هستند.
INSTALLED_APPS = [
"""
Add your other apps here
"""
# Social account provider (google)
'allauth.socialaccount.providers.google',
]
مرحله 2: شناسه مشتری و کلید مخفی خود را در Google ایجاد کنید
برای تکمیل این مرحله، باید یک حساب کاربری گوگل ایجاد کنید. اگر این کار را انجام داده اید، مراحل زیر را دنبال کنید:
- برای ایجاد یک پروژه جدید، به کنسول Google Cloud بروید. ابتدا روی منوی کشویی نشان داده شده در تصویر زیر کلیک کنید:
- بعد، روی پروژه جدید کلیک کنید:
- یک نام برای پروژه خود وارد کنید، سپس روی دکمه CREATE کلیک کنید:
- با انتخاب پروژه خود، روی منوی همبرگر کلیک کنید. APIs & Services و سپس Credentials را انتخاب کنید:
- سپس روی گزینه ای که می گوید CONFIGURE CONSENT SCREEN کلیک کنید و External را انتخاب کنید:
- در صفحه بعد، یک نام برای برنامه خود وارد کنید و در صورت لزوم یک ایمیل اضافه کنید. همچنین میتوانید پیکربندیها را برای سفارشیسازی کاوش کنید. پس از اتمام، روی ذخیره و ادامه کلیک کنید.
- در منوی سمت چپ، Credentials را انتخاب کنید. پس از آن، روی CREATE CREDENTIALS کلیک کنید و شناسه مشتری OAuth را انتخاب کنید.
- در مرحله بعد، نوع Application را انتخاب کرده و یک نام برای آن وارد کنید. برای این آموزش نوع Application Web application خواهد بود.
- سپس، URIهایی را برای مبداهای مجاز جاوا اسکریپت و URIهای مجاز تغییر مسیر اضافه کنید. میزبان وب سایت شما باید مبدا جاوا اسکریپت باشد و سیستم پس از احراز هویت کاربران را به URI تغییر مسیر هدایت می کند. URI تغییر مسیر معمولاً باید شامل host-name/accounts/google/login/callback/ شما باشد. برای حالت توسعه، این عبارت خواهد بود: http://127.0.0.1:8000/accounts/google/login/callback/. پس از اتمام بر روی CREATE کلیک کنید.
- پس از ایجاد اعتبارنامه، می توانید شناسه مشتری یا رمز مشتری خود را در مکانی امن کپی کنید یا آنها را به عنوان فایل JSON دانلود کنید.
مرحله 3: شناسه مشتری و کلید مخفی خود را به برنامه جنگو خود اضافه کنید
پس از ایجاد اعتبار لازم، به آدرس http://127.0.0.1:8000/admin بروید، Social applications را انتخاب کنید و یک برنامه اجتماعی جدید ایجاد کنید. این مراحل را برای ایجاد یک برنامه اجتماعی جدید دنبال کنید:
- یک ارائه دهنده اضافه کنید. ارائه دهنده به برنامه ای اشاره می کند که در حال احراز هویت کاربر خود با آن هستید. در این مورد، گوگل است، در مورد دیگر، ممکن است اسنپ چت باشد.
- یک نام برای برنامه اجتماعی جدید خود وارد کنید. مطمئن شوید که نام منطقی است
- شناسه مشتری را که از Google کپی کردهاید جایگذاری کنید.
- برای کلید مخفی، در Client Secret که از Google کپی کردهاید، جایگذاری کنید.
- فیلد کلید برای احراز هویت با Google اعمال نمی شود، بنابراین آن را نادیده بگیرید.
- در نهایت، سایتی را برای مرتبط کردن برنامه اجتماعی انتخاب کنید.
مرحله 4: احراز هویت گوگل خود را آزمایش کنید
از پنل مدیریت خود خارج شوید و به http://127.0.0.1:8000/accounts/login/ بروید. گزینه ای برای ورود از طریق گوگل خواهید دید.
روی آن کلیک کنید تا به صفحه رضایت هدایت شوید. در مرحله بعد، یک حساب کاربری برای ورود به سیستم انتخاب کنید.
پس از انتخاب یک حساب کاربری، به http://127.0.0.1:8000/accounts/profile/ هدایت می شوید. این بدان معناست که برنامه شما کاملاً کار می کند. شما می توانید قالب های سفارشی را برای جایگزینی قالب های پیش فرض ایجاد کنید.
افزایش ثبت نام کاربر با احراز هویت اجتماعی در جنگو
فعال کردن احراز هویت اجتماعی راهی عالی برای کمک به کاربران شما برای داشتن تجربه عالی در ثبت نام برای برنامه شما است. راههای دیگری برای فعال کردن احراز هویت در جنگو وجود دارد، و شما باید آنها را بررسی کنید تا تصمیم بگیرید چه چیزی برای استفاده شما بهترین است.