$ npm install -g localtunnel
$ lt --port 8000
$ ./manage.py runserver 0.0.0.0:8000
$ pip install django-telegram-login
INSTALLED_APPS = [ ... 'django_telegram_login', ]
TELEGRAM_BOT_NAME = 'HabrahabrTelegramLoginBot' TELEGRAM_BOT_TOKEN = '459236585:AAEee0Ba4fRijf1BRNbBO9W-Ar15F2xgV98' TELEGRAM_LOGIN_REDIRECT_URL = 'https://kqmxkdqitb.localtunnel.me/'
from django.conf import settings bot_name = settings.TELEGRAM_BOT_NAME bot_token = settings.TELEGRAM_BOT_TOKEN redirect_url = settings.TELEGRAM_LOGIN_REDIRECT_URL
<script async src="https://telegram.org/js/telegram-widget.js?2" data-telegram-login="samplebot" data-size="large" data-auth-url="" data-request-access="write"> </script>
from django.conf import settings from django_telegram_login.widgets.constants import ( SMALL, MEDIUM, LARGE, DISABLE_USER_PHOTO, ) from django_telegram_login.widgets.generator import ( create_callback_login_widget, create_redirect_login_widget, ) bot_name = settings.TELEGRAM_BOT_NAME bot_token = settings.TELEGRAM_BOT_TOKEN redirect_url = settings.TELEGRAM_LOGIN_REDIRECT_URL telegram_login_widget = create_callback_login_widget(bot_name, corner_radius=10, size=MEDIUM) telegram_login_widget = create_redirect_login_widget( redirect_url, bot_name, size=LARGE, user_photo=DISABLE_USER_PHOTO )
<script async src="https://telegram.org/js/telegram-widget.js?2" data-telegram-login="HabrahabrTelegramLoginBot" data-size="medium" data-radius="10" data-auth-url="https://kqmxkdqitb.localtunnel.me" data-onauth="onTelegramAuth(user)" data-request-access="write"></script>
def create_redirect_login_widget( redirect_url, bot_name, size=SMALL, user_photo=True, access_write=True ): """ Create redirect widget, that allows to handle user data as get request params. """ script_initital = \ '<script async src="https://telegram.org/js/telegram-widget.js?2" ' bot = 'data-telegram-login="{}" '.format(bot_name) size = 'data-size="{}" '.format(size) userpic = \ 'data-userpic="{}" '.format(str(user_photo).lower()) if not user_photo else '' redirect = 'data-auth-url="{}" '.format(redirect_url) access = 'data-request-access="write"' if access_write else '' script_end = '></script>' widget_script = \ script_initital + bot + size + userpic + redirect + access + script_end return widget_script
def callback(request): telegram_login_widget = create_callback_login_widget(bot_name, size=SMALL) context = {'telegram_login_widget': telegram_login_widget} return render(request, 'telegram_auth/callback.html', context)
It is template to render callback Telegram widget! <!-- {{ telegram_login_widget|safe }} --> {% autoescape off %} {{ telegram_login_widget }}{% endautoescape %} <script type="text/javascript"> function onTelegramAuth(user) { alert('Logged in as ' + user.first_name + ' ' + user.last_name + '!'); } </script>
<script type="text/javascript"> function onTelegramAuth(user) { alert('Logged in as ' + user.first_name + ' ' + user.last_name + '!'); } </script>
from django_telegram_login.authentication import verify_telegram_authentication from django_telegram_login.errors import ( NotTelegramDataError, TelegramDataIsOutdatedError, ) def index(request): # , , # , # Telegram . if not request.GET.get('hash'): return HttpResponse('Handle the missing Telegram data in the response.') try: result = verify_telegram_authentication( bot_token=bot_token, request_data=request.GET ) except TelegramDataIsOutdatedError: return HttpResponse('Authentication was received more than a day ago.') except NotTelegramDataError: return HttpResponse('The data is not related to Telegram!') return HttpResponse('Hello, ' + result['first_name'] + '!')
TELEGRAM_BOT_NAME = 'django_telegram_login_bot' TELEGRAM_BOT_TOKEN = '459236585:AAEee0Ba4fRijf1BRNbBO9W-Ar15F2xgV98' TELEGRAM_LOGIN_REDIRECT_URL = 'https://iyjjvnvszx.localtunnel.me/'
from django.conf import settings from django.http import HttpResponse from django.shortcuts import render from django_telegram_login.widgets.constants import ( SMALL, MEDIUM, LARGE, DISABLE_USER_PHOTO, ) from django_telegram_login.widgets.generator import ( create_callback_login_widget, create_redirect_login_widget, ) from django_telegram_login.authentication import verify_telegram_authentication from django_telegram_login.errors import ( NotTelegramDataError, TelegramDataIsOutdatedError, ) bot_name = settings.TELEGRAM_BOT_NAME bot_token = settings.TELEGRAM_BOT_TOKEN redirect_url = settings.TELEGRAM_LOGIN_REDIRECT_URL def index(request): # Initially, the index page may have no get params in URL # For example, if it is a home page, a user should be redirected from the widget if not request.GET.get('hash'): return HttpResponse('Handle the missing Telegram data in the response.') try: result = verify_telegram_authentication( bot_token=bot_token, request_data=request.GET ) except TelegramDataIsOutdatedError: return HttpResponse('Authentication was received more than a day ago.') except NotTelegramDataError: return HttpResponse('The data is not related to Telegram!') # Or handle it like you want. For example, save to DB. :) return HttpResponse('Hello, ' + result['first_name'] + '!') def callback(request): telegram_login_widget = create_callback_login_widget(bot_name, size=SMALL) context = {'telegram_login_widget': telegram_login_widget} return render(request, 'telegram_auth/callback.html', context) def redirect(request): telegram_login_widget = create_redirect_login_widget( redirect_url, bot_name, size=LARGE, user_photo=DISABLE_USER_PHOTO ) context = {'telegram_login_widget': telegram_login_widget} return render(request, 'telegram_auth/redirect.html', context)
It is template to render callback Telegram widget! <!-- {{ telegram_login_widget|safe }} --> {% autoescape off %}{{ telegram_login_widget }}{% endautoescape %} <script type="text/javascript"> function onTelegramAuth(user) { alert('Logged in as ' + user.first_name + ' ' + user.last_name + '!'); } </script>
It is template to render redirect Telegram widget! <!-- {{ telegram_login_widget|safe }} --> {% autoescape off %}{{ telegram_login_widget }}{% endautoescape %}
Source: https://habr.com/ru/post/348952/
All Articles