Авторизация/Регистрация пользователя через Telegram

1*doGbQGADRFexkgnP-TA2og.jpeg

Буквально позавчера Telegram выкатили нормальную OAuth авторизацию через мессенджер на сторонних ресурсах.

Раньше тоже можно было авторизовать пользователя через телеграм. Но для этого и пользователю и разработчику нужно было сделать много лишних телодвижений.

А теперь всё просто как в ВК или Facebook.

На нужен вебсайт. На localhost авторизацию проверить не получится, потому что к боту привязывается доменное имя.

Создать бота всё-таки придётся. Авторизовываться будут с помощью него. Разработчики Телеграм говорят, что бот сможет сам инициировать диалог с авторизованными таким способом пользователями. Я этого пока не проверял. Поверим на слово.

Подробно писать как создать бота я не буду, потому что про это написана и перенаписано миллион статей. Вот ссылка на мануал от Telegram https://core.telegram.org/bots#3-how-do-i-create-a-bot .

После создания бота нам дадут ключ api, который пригодится нам в дальнейшем.

Нужно отправить боту @BotFather команду /setdomain , он сначала попросит выбрать бота, а потом нужно будет ввести адрес сайта.

На странице https://core.telegram.org/widgets/login находим конфигурацию виджета

Вводим username бота, который сами придумали в процессе создания бота.

Далее выбирает размер кнопки. Три варианта. При перещёлкивании кнопка внизу будет автоматически менять размер.

Затем нужно выбрать как мы будем обрабатывать данные полученные от телеграм. Тут два варианта. Либо мы делает под это отдельную страницу и пользователя перенаправить туда, мы обработаем данные и можем перенаправить обратно или, например в закрытую часть сайта. Либо же мы делаем всё это через callback без перезагрузки страницы. Второй вариант мне кажется правильнее и современнее. Его и выбираю.

Далее там самая галочка, которая видимо и отвечает за отсылку сообщений от имени бота

Ну дальше поле с получившимся кодом.

Тут два тега скрипт. В принципе можно всё это вставить в нужное место на сайте, но я вставил только верхний, который рисует кнопку. Из нижнего я взял callback функцию и вставил в общий js-файл для сайта.

Сейчас эта функция просто выводит стандартный alert в браузере с сообщением о том, что пользователь залогинен и некоторые его данные. Позже напишем сюда запрос к серверу.

Как уже написал чуть выше, скрипт, отрисовывающий кнопку входа в телеграм, я вставил в нужное место в разметке. В файл, где у меня прописаны основные js функции, я добавил ту самую callback-функцию. У меня на сайте установлен jquery, поэтому не стал выделываться и отправил запрос через него.

function onTelegramAuth(user) {

$.ajax({

url: ‘/login’,

method: ‘post’,

data: user,

dataType:’json’,

success: function (data) {

location.reload()

},

error: function (error) {

alert(error)

}

})

}

Сайт работает на nodejs на фреймворке koa, поэтому пример буду приводить на нём(в конце дам ссылку на php)

Это контроллер login

//подключаем необходимые модули

const Router = require(‘koa-router’)

const router = new Router()

const jwt = require(‘jsonwebtoken’)

const config = require(‘../config/config’)

const mongo = require(‘../config/mongo’)

const crypto = require(‘crypto’);

const { strcmp } = require(‘../lib/utils’)

const ObjectID = require(‘../config/mongo’).ObjectID

// тут роут

exports.init = function (app) {

router.post(‘/login’, login)

app.use(router.routes())

}

// собственно функция логина

async function login(ctx,next) {

// сюда методом post приходят данные в виде json

const authData = ctx.request.fields

//с помощью hash мы проверим целостность данных, то есть вообще с телеграма ли нам это пришло или кто-то нехороший копается

const checkHash = authData.hash

delete authData[‘hash’]

/* по инструкции телеграм мы должны взять все данные, кроме hash, которые пришла нам от телеграм и собрать из в одну строку в формате key=value, разделяя символом переноса строки n */

let dataCheck = []

for (let key in authData) {

dataCheck.push(key + ‘=’ + authData[key])

}

dataCheck.sort();

dataCheck.join(“n”)

// Делаем из неё sha256

const secretKey = crypto.createHash(‘sha256’)

.update(config.oauth.telegram.botToken)

/* и проверяем если не ок, то шлём юзера куда подальше, если ок, то добавляем или обновляем пользователя в базе данных */

const hash = crypto.createHmac(‘sha256’, dataCheck.toString(), secretKey);

if (strcmp(hash, checkHash) === -1) {

ctx.status = 401

ctx.body = ‘Data is NOT from Telegram’

}

if ( +(new Date()) — authData.auth_date > 86400) {

ctx.status = 401

ctx.body = ‘Data is outdated’

}

const user = await mongo.users.findOne({id:authData.id})

if(!user){

await mongo.users.insertOne(authData)

}else{

await mongo.users.updateOne({_id: new ObjectID(user._id)},{$set:{authData}})

}

/*Здесь я использовал jwt, чтобы сделать токен, в принципе можно написать это самому, но суть статьи не в этом*/

const token = await jwt.sign(authData, config.app.secret)

/* Ставлю куку с этим токеном */

ctx.cookies.set(‘tgUser’, token);

ctx.status = 200

ctx.body = {

user: authData

}

/*Теперь я добавлю перед всеми роутами middlware. Я использую koa, там принять пользователя хранить в ctx.state.user*/

app.use(async (ctx,next) => {

const token = ctx.cookies.get(‘tgUser’)

if(token){

try {

ctx.state.user = await jwt.verify(token, config.app.secret)

}catch (error) {

ctx.cookies.set(‘tgUser’, ‘’);

}

}

await next(ctx)

})

После этого остаётся где нужно проверять переменную ctx.state.user.

Есть пример намного проще и на php от самих Телеграм. Вероятно, самые внимательные его уже нашли https://gist.github.com/anonymous/6516521b1fb3b464534fbc30ea3573c2

Этот пример чисто демонстративный, для реального сайта его нужно будет допилить.

__________

https://shogenov.com/

___________

Телграм канал — Я — программист!

Шутеечки в канале Дневнике программиста

Чат в телеге Клуб программистов

</p>

 Удалить аккаунт Телеграмм предельно просто, но стоит понимать: что при этом вся ваша переписка будет удалена вместе с аккаунтом, а фото, видео и другие файлы, которыми Вы обменивались в чате, сохраняться при условии, что вы их загрузили на свое устройство. Стоит хорошо подумать перед тем, как Вы полностью сотрете всю информацию о вашем профиле в Telegram, возможно Вам оправили важное сообщение о котором Вы позабыли и будете жалеть, что не сохранили. Но если Вы настроены решительно и уверены, что ничего ценного не потеряете, то воспользуйтесь этой небольшой инструкцией.Независимо от того, на каком устройстве у вас установлен мессенджер, Android, iPhone или PC процесс удаления может быть только один, который описан в этой инструкции.

  1. В любом браузере перейдите по ссылке https://my.telegram.org/auth?to=deactivate. Если Вы находитесь в России ссылка может не открыться из-за блокировки Роскомнадзора. Для обхода блокировки можно использовать Анонимайзер, к примеру http://cameleo.xyz/ или воспользуйтесь “Турбо” режимом если у вас Opera или Яндекс.Браузер. Если пользуетесь Google Chrome или Firefox установите расширение Stealthy или Frigate.
  2. На сайте введите номер телефона учетной записи, которую хотите стереть.
  3. После чего в мессенджере придет сообщение с паролем, обратите внимание на то, что сообщение приходит не по СМС, а непосредственно в Telegram, поэтому прочесть его можно не только на телефоне, но и на компьютере, если конечно у Вас установлена версия для ПК.
  4. Введите пароль из сообщения в браузере.
  5. Если пароль верен, Вы сможете перейти к следующему шагу. В открывшемся окне выберите – Deactivate account.
  6. Разработчики мессенджера Телеграмм стараются сделать свой продукт лучше, а Вы можете подсказать им, что они делают не так, указав причину удаления вашего профиля. Для этого напишите пару слов в поле – Why are you leaving? (Почему Вы уходите). Если конечно хотите, но это не обязательно. Затем нажмите на Done.
  7. Система еще раз спросит Вас, уверены ли Вы, что хотите удалить аккаунт и предупредит о том, что Вы не сможете зарегистрировать новый на тот же номер телефона в течение нескольких дней. Нажмите на – Yes, delete my account, если Вас это устраивает.
  8. Затем Вы увидите сообщение, что Ваш аккаунт успешно удален.

Не смотря на предупреждение, мне удалось зарегистрироваться вновь, на тот же номер телефона, сразу после деактивации аккаунта. Но возможно мне просто повезло.

Понравилось? Поделитесь с друзьями!

Telegram Passport

Это единый метод авторизации для сайтов, которые требуют идентификацию личности. Социальные комментарии Cackle

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

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

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

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

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

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

    • Откройте браузер вставьте ссылку для перехода к форме ликвидации https://my.telegram.org/auth?to=deactivate. Некоторые пишут так: https my telegram org authtodeactivate. Скорее всего, поисковик поймёт и это.
    • Теперь о сложностях, с которыми могут столкнуться жители России. Из-за действий Роскомнадзора официальный веб-сайт мессенджера telegram.org заблокирован, поэтому ссылка не работает. Чтобы обойти блок можно применить программу анонимайзер, которая маскирует IP адрес. Воспользуйтесь, к примеру,   cameleo.xyz. Кроме того, помогают расширения браузера. Для Гугл Хром и Firefox  подходит Stealthy. Иногда выручает режим турбо в Яндексе и Опере.

Удаляем через Opera со встроенным VPN

Также можно еще обойти блокировку вот таким методом: Открываем браузер Опера;

  1. Заходим в настройки и вбиваем в поиске VPN ;
  2. Включаем VPN;
  3. Готово! Сайт открывается.
    • После перехода впишите номер телефона, к которому был привязан профиль в мессенджере.
    • Вам придёт сообщение в Телеграм с кодом деактивации, его нужно вставить в уже открытую форму.
    • В новом окне отмечайте Deactivate account.
    1. Вам предложат сообщить, в чём причина удаления — Why are you leaving? Этот шаг можно пропустить. Нажмите Done.
    • Вас предупредят, что на этот номер некоторое время не получится сделать новый аккаунт. Затем, если не передумали, ещё раз одобрите ликвидацию своей учётной записи. Кликните по надписи Yes, delete my account.
  • После этого появится запись об удалении.

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

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

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

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

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

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

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

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

Delete Telegram — удаляем приложение

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

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

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

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

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

5cf4131a53d36.png

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

Al-Sher”>2019-06-06 19:19:12

Всем привет. Давно ничего не писал, так как не было никаких идей, но недавно, 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 Видим следующую картину:3fe1eb800c8426be313ea4a6b407ce07.png Выходим из приложения: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. Спасибо за внимание!Используемые источники:

  • https://medium.com/@alexandershogenov/делаем-oauth-авторизацию-telegram-на-своём-сайте-74d0d63095b0
  • https://telegram.org.ru/350-kak-udalit-akkaunt-telegram.html
  • https://telegramzy.ru/kak-udalit-akkaunt/
  • https://web-wost.ru/avtorizaciya-cherez-telegram-bota/
  • https://habr.com/ru/post/264301/

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий