-
Birinchi o'rinda foydalanuvchilar login qilda bo'ladigan eng sodda websaytni tuzib olamiz.
-
Telegram bot ochish
-
Ngrok serverini yoqamiz.
-
Shu server urlini botimizga botfatherdagi /setdomain buyrug'i orqali biriktiramiz.
-
pip install social-auth-app-django==5.0.0 deb ushbu paketni o'rnatamiz. Eslatma!! bu paketni shu versiyasi djangoni 4 versiyasida ishlamaydi.
-
installed apps listiga "social_django" ni qo'shib qo'yoqamiz
-
authenticate sozlamarini sozlaymiz: AUTHENTICATION_BACKENDS = ( 'social_core.backends.telegram.TelegramAuth', 'django.contrib.auth.backends.ModelBackend', )
-
2-qadamda yartilgan bot tokenini ham sozlamalarimizga ham qo'shib qo'yamiz: SOCIAL_AUTH_TELEGRAM_BOT_TOKEN = "5869794463:AAFVmxkd5Xs2d2HDtKIuG1c2dNLaydPBmNg"
LOGIN_REDIRECT_URL = reverse_lazy('profile')
- Paketimizni urllarini ham qo'shib qo'yamiz:
path('auth/', include('social_django.urls', namespace='social')),
- Endi telegram orqali login qilish uchun tugma request jo'natish uchun JS yozishimiz kerak bularni telegramning rasmi sahifasidan olishimiz mumkin: https://core.telegram.org/widgets/login
- Olingan user ma'lumotlarini templateda chiqarish 'social_django.context_processors.backends', 'social_django.context_processors.login_redirect',
Meta:
-
{% for associated in backends.associated %}
- ID: {{ associated.uid }}
- Provider: {{ associated.provider }}
- Extra: {{ associated.extra_data }} {% endfor %}
- Telegram akkaunt profil rasmini Saytimizdagi user profiliga saqlash
CustomUser tuzish from django.db import models from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser): profile = models.ImageField(upload_to='profile-image/')
def __str__(self):
return self.username
pip install Pillow
AUTH_USER_MODEL = "users.CustomUser" media settingslarni to'g'irlash
MEDIA_URL = "media/" MEDIA_ROOT = BASE_DIR.joinpath("media")
urllar esdan chiqmasin
from django.conf import settings from django.conf.urls.static import static
- static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
signal yozamiz
app.py ushbu funksiyani qo'shib ketasiz
def ready(self): import users.signals
from django.db.models.signals import post_save from django.dispatch import receiver from social_django.models import UserSocialAuth from users.models import CustomUser
@receiver(post_save, sender=UserSocialAuth) def save_profile_photo(sender, instance, created, update_fields, **kwargs):
if instance.extra_data:
user = instance.user
picture = instance.extra_data['photo_url']
user.profile = picture
user.save()