Telegram позволил владельцам сайтов добавить авторизацию через мессенджер — Офтоп на vc.ru

Авторизация через Telegram бота. Передача параметров пользователя из Telegram.

Al-Sher02 Jun 2019

Всем привет. Давно ничего не писал, так как не было никаких идей, но недавно, 31 мая 2019 года, Telegram выпустил новое обновление, в котором добавил новый тип данных — LoginUrl
. Итак, попробую объяснить идею авторизации с помощью Telegram бота. Для начала, чтобы бот мог писать пользователю, пользователь должен отправить сообщение /start
. Бот может как угодно ответить на это сообщение, например обычным приветствием или набором кнопок для взаимодействия с ботом. Именно кнопками мы и будем пользоваться для авторизации, но об этом чуть позже. Пользователь жмет на нашу кнопку, после чего перед ним появляется окошко с подтверждением действия. Если пользователь подтверждает свое действие, то он переходит на указанный в параметрах url с данными своего аккаунта, в том числе и уникальный id для пользователя.

Начнем. Для начала необходимо написать боту @BotFather для создания нашего бота. Ответив на несколько вопросов мы получим токен, с помощью которого можно управлять ботом. Далее нам необходимо добавить сайт для бота. Для этого пишем @BotFather сообщение /setdomain
. Там нас спрашивают какому боту мы хотим указать url, выбираем нужного и указываем необходимый домен. Следующим шагом необходимо настроить получение сообщений ботом от пользователя. Этот шаг я описывать не буду, лишь скажу что Telegram поддерживает как ручную проверку обновлений (метод getUpdates
), так и установку Webhook(метод setWebhook
). Ну и конечно же нам необходимо отправлять сообщение пользователю с помощью метода sendMessage
. Вот на нем я и остановлюсь подробнее. Данный метод принимает следующие параметры:

  • chat_id — в данном случае id пользователю, которому мы отправляем сообщение. Получаем от Telegram в методе getUpdates
    или с помощью Webhook.
  • text — текст сообщения. В данном случае он нам не нужен, так как мы будем использовать кнопку. Но если хотите объясниться перед пользователем, то это идеальный момент.
  • parse_mode — Указывает формат отправляемого сообщения. Поддерживаются Markdown и HTML.
  • disable_web_page_preview — Отключает превью для ссылки в данном сообщении.
  • disable_notification — Отправка сообщение без уведомления для юзера.
  • reply_to_message_id — Указывает на id сообщения, которое мы цитируем.
  • reply_markup — Добавляет кнопки.

Как можно было догадаться, нам необходимы chat_id
и reply_markup
. reply_markup
принимает параметры в виде json массива с указанием типа кнопок и их параметров. Мы будем использовать inline_keyboard
, так как они поддерживают LoginUrl
. Ну давайте создадим простую кнопку:

$keyboard = Array(      'inline_keyboard' => [          [              ['text' => 'Нажми меня', 'login_url' => [                      'url' => 'https://web-wost.ru'                  ]              ]          ]      ]  );

Не забываем перевести данную кнопку в json:

$keyboard_json = json_encode($keyboard);

Ну и отправляем:

file_get_contents('https://api.telegram.org/bot' . $token . '/sendMessage?chat_id=' . $id . 'reply_markup=' . $keyboard_json);

Не забываем так же создать переменные $token с токеном бота и $id с указанием id пользователя. Если всё сделано верно, то после выполнения данного php скрипта, бот отправит пользователю сообщение с кнопкой ‘Нажми меня’. После нажатия на кнопку, пользователя спросят разрешение об отправке данных и переходе по ссылке. Получаем данные от пользователя с помощью REQUEST:

$user_id = $_REQUEST['id'];  $username = $_REQUEST['username'];  $hash = $_REQUEST['hash'];

В принципе так мы получаем необходимые данные о пользователе, но их можно легко подменить. Для безопасности передачи данных Telegram отправляет нам hash. Для его проверки воспользуемся следующим кодом:

$data = $_REQUEST;  $hash = $data['hash'];  unset($data['hash']);  $new_data = [];  foreach($data as $key => $value)      $new_data[] = $key . '=' . $value;  sort($new_data);  $data_string = implode('n', $new_data);  $secret_hash = hash('sha256', $token, true);  $new_hash = hash_hmac('sha256', $data_string, $secret_hash);  if(strcmp($hash, $new_hash) !== 0)       exit('Подмена данных!!!');  echo 'Привет ' . $data['username'];

Попробую разобрать данный код. Сначала мы записываем все полученные данные в переменную $data
, далее сохраняем hash в специальную переменную($hash
) и удаляем его из массива данных $data
. Создаем новый пустой массив($new_data
) для наших данных. Используя foreach, мы проходим через все полученные данные, записывая их в наш новый массив($new_data
), сохраняя ключ=значение. Сортируем по алфавиту, превращаем в строку $data_string
, записывая элементы через n. Хешируем наш токен($secret_hash
), а дальше и все наши данные($new_hash
). И последним шагом является проверка подлинности хэша.

Ну и осталось лишь осмотреть все параметры объекта LoginUrl
:

  • url — указывает url, куда будет отправлен пользователь после нажатия на ссылку.
  • forward_text — текст кнопки в пересылаемых сообщениях.
  • bot_username — имя бота, через которого будет происходить авторизация.
  • request_write_access — запрос на возможность ботом писать пользователю сообщения.

На этом я заканчиваю, надеюсь эта запись будет полезна 🙂

В данном топике хочу описать дополнительный, а для некоторых сервисов возможно и основной способ авторизации и регистрации пользователя через Telegram, подобно OAuth авторизации через социальные сети и web-сервисы. Допустим, у Вас есть некий сервис, который предлагает пользователям вход через Telegram. На странице авторизации пользователю предлагается ввести его Username в Telegram. После ввода Username, на аккаунт пользователя приходит сообщение с кодом подтверждения, который он вводит на странице авторизации. В первую очередь нам потребуется «живой» аккаунт в Telegram, то есть аккаунт который зарегистрирован на мобильный номер телефона. В данном случае боты не подходят для данной задачи, так как боты не могут писать сообщения первыми. Теперь что касается серверной стороны. На странице приложений Telegram есть не официальное приложение telegram-cli. Оно и будет выполнять функцию приложения которое будет взаимодействовать с сервером Telegram. Для упрощения примера telegram-cli будем ставить в каталог /usr/local/src/:cd /usr/local/src/

Клонируем репозиторий:git clone --recursive https://github.com/vysheng/tg.git && cd tg
Ставим необходимые пакеты:sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev python-dev
Собираем telegram-cli:./configure make
При первом запуске, приложение попросит ввести номер телефона нашего «живого» аккаунта. После ввода номера, будет выслан код подтверждения по смс или в приложение если данный аккаунт сейчас активен на другом устройстве. После подтверждения, в вашем домашнем каталоге будет создана директория «.telegram-cli» в которой будут хранится файлы конфигураций для указанного аккаунта. Запускаем: /usr/local/src/tg/bin/telegram-cli -k /usr/local/src/tg/tg-server.pub
Видим следующую картину: Выходим из приложения:quit
Запускаем приложение как демон например на порту 8089:/usr/local/src/tg/bin/telegram-cli --json -k /usr/local/src/tg/tg-server.pub -W -d -P 8089 &
Теперь нам необходим скрипт который будет взаимодействовать с telegram-cli. По ключевым словам(telegram-cli php client) на GitHub было найдено готовое решение на PHP. Установка: git clone https://github.com/zyberspace/php-telegram-cli-client cd php-telegram-cli-client curl -sS https://getcomposer.org/installer | php php composer.phar install Создаем файл tg.php со следующим содержанием:
  require('vendor/autoload.php'); $telegram = new ZyberspaceTelegramCliClient('tcp://localhost:8089');  $USERNAME = '';  if($user = $telegram->exec("resolve_username {$USERNAME}")){  if($user->type == 'user'){  $code = mt_rand(10000, 99999); $message = "Hi {$user->first_name}! Your code: {$code}"; if($telegram->exec("msg user#{$user->id} {$message}")){ echo "Send message: Successrn"; } else { echo "Send message: Errorrn"; } }  } else { echo "User {$USERNAME} not found.rn"; } 

В переменную $USERNAME вписываем username пользователя которому будет отправлено сообщение с кодом подтверждения. Запускаем скрипт:php tg.php
Если все прошло успешно, пользователю будет отправлено сообщение с кодом. На базе данного примера можно легко реализовать регистрацию/авторизацию пользователей через Telegram. Спасибо за внимание!

115

39.9k


115

Если вы не знаете, как удалить Телеграмм аккаунт, мы вам поможем. Ниже описаны стандартные, а также оригинальные методы по выполнению Telegram delete account. Вы сможете обойти блокировку, ликвидировать всё без ссылки и настроить быстрое самоуничтожение.

Удаляем аккаунт Telegram — метод через браузер

Мессенджер Телеграм используют во всём мире. Каждый находит в нём что-то своё: кого-то успокаивает супербезопасное шифрование, кто-то любит читать каналы и общаться, а кому-то нравятся стикеры.

Но иногда человек хочет отказаться от своей учётной записи в мессенджере. Тогда в интернете появляются такие запросы: udalit account telegram или akkaunt и что-нибудь подобное. А узбекские пользователи могут написать вот так: telegram account qilish. На каком бы языке вы ни  общались, стандартная инструкция будет одна.

Во-первых, делать ликвидацию нужно через браузер, лучше не мобильный, а на стационарном устройстве. Во-вторых, данный способ может не сработать у российских пользователей. Как действовать им, расскажем чуть позже.

Стандартный метод, как уничтожить свой аккаунт:

    • Откройте браузер вставьте ссылку для перехода к форме ликвидации https://my.telegram.org/auth?to=deactivate
      . Некоторые пишут так: httpsmytelegramorgauthtodeactivate
      . Скорее всего, поисковик поймёт и это.
    • Теперь о сложностях, с которыми могут столкнуться жители России. Из-за действий Роскомнадзора официальный веб-сайт мессенджера telegram.org заблокирован, поэтому ссылка не работает. Чтобы обойти блок можно применить программу анонимайзер, которая маскирует IP адрес. Воспользуйтесь, к примеру,   cameleo.xyz. Кроме того, помогают расширения браузера. Для Гугл Хром и Firefox  подходит Stealthy. Иногда выручает режим турбо в Яндексе и Опере.
  • Также можно еще обойти блокировку вот таким методом:Открываем браузер Опера;
  1. Заходим в настройки и вбиваем в поиске VPN ;
  2. Включаем VPN;
  3. Готово! Сайт открывается.
    • После перехода впишите номер телефона, к которому был привязан профиль в мессенджере.
    • Вам придёт сообщение в Телеграм с кодом деактивации, его нужно вставить в уже открытую форму.
    • В новом окне отмечайте Deactivate account.
    1. Вам предложат сообщить, в чём причина удаления — Why are you leaving? Этот шаг можно пропустить. Нажмите Done.
    • Вас предупредят, что на этот номер некоторое время не получится сделать новый аккаунт. Затем, если не передумали, ещё раз одобрите ликвидацию своей учётной записи. Кликните по надписи Yes, delete my account
      .
  • После этого появится запись об удалении.

Решившись удалить аккаунт в Телеграмме, вы должны отдавать себе отчёт, что это действие необратимо.  Будут утеряны все контакты, пропадёт переписка, включая фото, аудио- и видеофайлы. Даже если вы создадите новую учётную запись с этим же номером, чаты и подписки не восстановятся.

Delete Telegram: можно ли обойтись без ссылки

Если вы думаете, как удалить Телеграмм аккаунт навсегда, используйте нетрадиционный, но совершенно простой способ. Уничтожьте не свою учётку в мессенджере, а  ликвидируйте само приложение в телефоне. Тот, кто уже чистил список установок, знает – это сделать очень легко. Для новичков приводим инструкции:

  1. Зайдите в настройки телефона.
  2. Найдите и откройте вкладку «Приложения»
    (или «Диспетчер приложений»).
  3. Отыщите Телеграм, зайдите и нажмите на кнопку «Удалить»
    .
  4. Подтвердите своё решение и дождитесь, пока  деинсталляция закончится.

Всё, вам не придётся искать переход в браузере на страницу деактивации — my telegram org deactivate. Однако вы же понимаете, что ваш аккаунт ещё существует в виртуальном пространстве. Чтобы добить его окончательно, выполните настройку быстрого самоуничтожения. Что это и как сделать, расскажем позже. А пока ещё один вариант ликвидации приложения.

  1. Зайдите в свой магазин: Гугл Маркет или Апп Сторе.
  2. Вызовите меню и выберите «Мои приложения и игры»
    .
  3. Во вкладке «Установленные» найдите Telegram.
  4. Коснитесь логотипа дважды.
  5. На следующем экране нажимайте на кнопку «Удалить», а затем на ОК.

Вы успешно закончили операцию «Telegram delete account». Правда, убрали его вместе с приложением.

Ускоряем самоуничтожение – минимальный срок 1 месяц

Допустим, вы избавились от ненужного мессенджера в телефоне. Но вы же в курсе, что ваша учётная запись продолжает жизнь. Если этот факт вас беспокоит не слишком, можете ничего не делать. Телеграм сам не терпит, когда пользователь его надолго покидает. В этом мессенджере не бывает брошенных личных страниц, которые не посещают годами.

Когда человек перестаёт заходить, система сама ликвидирует его учётную запись. Полностью и бесследно. По умолчанию срок ожидания визита установлен на полгода. То есть если вы вошли последний раз в аккаунт 1 января, 1 июля входить будет некуда. Но вас будут предупреждать о скорой ликвидации.

Так вот вы можете переустановить таймер уничтожения на 3 месяца или даже на один. И больше ничего не делать.

Подробнее о том, как удалить Телеграмм аккаунт, включив автоматическое уничтожение:

    1. Откройте Телеграм на телефоне или компьютере.
    2. Зайдите в меню (три линеечки вверху слева).
    3. Выберите раздел настроек.
  1. Откройте вкладку «Конфиденциальность»
    .
  2. Пролистайте список до функции «Автоудаление аккаунта», названия в разных версиях могут отличаться.
  3. Нажмите и выберите нужный срок, есть 4 варианта: год, полгода, 3 и 1 месяц.

Не заходите в свой профиль, если хотите добиться скорейшей ликвидации. Точка отсчёта – это последний визит. Если вы опасаетесь, что не удержитесь и зайдёте в Телеграм, удалите приложение с телефона и ПК.

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации