Аутентификация через телеграм Django
Порядок такой:
- Запустил сервер на Django 8000 порту
- Запустил ngrok на 8000
- Создал бота в BotFather
- setdomain отправил тот что от ngrok(успешно)
- В telegram widget выбрал redirect to url: ссылка от ngrok/users/telegram/callback
- Скопировал полученный скрипт и вставил его на сайт.
- В браузере открываю не как localhost а по https://c4145841ytyab.ngrok-free.app/users/telegram/login
- Открывается страница с кнопкой, нажимаю на войти по телеграм, все успешно, в телеграм приходит уведомление о том что был вход успешный.
- Но после аутентификации не срабатывает callback.
На телефоне открываю эту же ссылку, и жму войти, все так же успешно, и тут отправляется данные от телеграм. То есть маршрут callback срабатывает. Почему так?
Вот ниже маршруты и представления:
urlpatterns = [
path('telegram/login/', TelegramLoginView.as_view(), name='telegram_login'),
path('telegram/callback/', TelegramCallbackView.as_view(), name='telegram_callback'),
]
class TelegramLoginView(View):
def get(self, request):
print(f"Вызван TelegramLoginView")
return render(request, "users/login.html")
class TelegramCallbackView(View):
def get(self, request):
data = request.GET
print(f"вызван Callback")
print(f"data: {data}")
service = TelegramAuthService(data)
try:
user = service.authenticate()
except ValueError:
return render(request, "users/login.html", {"error": "Ошибка входа через Telegram"})
login(request, user)
return render(request, "users/main.html")
{% extends 'base.html' %}
{% block title %}Вход{% endblock %}
{% block content %}
<div class="container">
<h2>Войти через Telegram</h2>
<script
async src="https://telegram.org/js/telegram-widget.js?22"
data-telegram-login="username бота"
data-size="large"
data-auth-url="https://c4145841hjab.ngrok-free.app/users/telegram/callback"
data-request-access="write">
</script>
</div>
{% endblock %}