ООО "Солнечный Ветер" Ларионов Андрей Николаевич
Создатель проекта: ООО "Солнечный Ветер" Ларионов Андрей Николаевич
Авторизация через телеграм на laravel

Авторизация через телеграм на laravel


Автор: admin Дата: 2024-06-25 14:11:29

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

1. Первое выполним в консоли команду

composer require socialiteproviders/telegram

2. Далее в файле config/services.php

прописываем следующий код:

'telegram' => [
    'bot' => env('TELEGRAM_BOT_NAME'),  // The bot's username
    'client_id' => null,
    'client_secret' => env('TELEGRAM_TOKEN'),
    'redirect' => env('TELEGRAM_REDIRECT_URI'),
],
3. Заходим в телеграм и находим пользователя @BotFather
 
4. Выполняем команду /newbot
 
5. Вводим имя бота с окончанием в слове bot, например, MyFirstBot
 
6. Записываем в файл .env настройки бота
TELEGRAM_BOT_NAME=MyFirstBot
TELEGRAM_TOKEN=6342418556:AAH3hghjTT7nU9GfBeXzIXFDdJCmLLaS9bvU
TELEGRAM_REDIRECT_URI=auth/telegram/callback
 
7. Добавляем в провайдер EventServiceProvider следующий код:
 
Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) {
    $event->extendSocialite('telegram', \SocialiteProviders\Telegram\Provider::class);
});
Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) {
    $event->extendSocialite('telegram', \SocialiteProviders\Telegram\Provider::class);
});
 
8а. Создаем два роута для перенаправления и обратном возвращении на сайт со внешнего сервиса телеграмм.
 
	// Авторизация через телеграмм
Route::get('auth/telegram/redirect', function() {
    return Socialite::driver('telegram')->redirect();
})->name('soc_telegram');

Route::get('auth/telegram/callback', function () {
   $telegramUser = Socialite::driver('telegram')->user();

   $user = \App\Models\User::updateOrCreate([
      'telegram_id' => $telegramUser->getId()
   ], [
       'telegram_id' => $telegramUser->getId(),
       'name' => $telegramUser->getNickname(),
       'email' => $telegramUser->getEmail() ?? $telegramUser->getId()."@telegram.com"
   ]);

   \Illuminate\Support\Facades\Auth::login($user);

   return redirect()->route('home');

})->name('back_telegram');
8б. Реалуем кнопку на форме авторизации, либо через ссылку роута soc_telegram, либо через подключение кнопки таким образом:
 
{!! Socialite::driver('telegram')->getButton() !!}
 
9. Напомню, что выходные данные от телеграмм будут следующими:
  • id
  • first_name
  • last_name
  • username
  • photo_url
10. Создаем миграцию для добавления в таблицу users дополнительного поля telegram_id
	return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::table('users', function (Blueprint $table) {
            //
            $table->unsignedBigInteger('telegram_id')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('telegram_id');
        });
    }
};
11. Настраиваем бота телеграм для того адреса на котором расположен сайт. Сначала вводим команду /setdomain.
 
12. Вводим имя бота, на который привязали авторизацию. В нашем случае, это @MyFirstBot. После чего вводим адрес сайта на котором все это реализовано https://mysite.ru
 
13. Проверяем работу авторизации через бота, и должно работать. В случае реализации на локальной машине, потребуется настроить еще httpd-vhosts.conf
 
ServerAdmin webmaster@157.90.119.134/public/
ProxyPreserveHost On
 
ProxyPass / http://127.0.0.1:80/
ProxyPassReverse / http://127.0.0.1:80/
ServerName https://157.90.119.134/public/
 
    ServerAdmin webmaster@mysite.ru
    ProxyPreserveHost On
 
    ProxyPass / http://127.0.0.1:80/
    ProxyPassReverse / http://127.0.0.1:80/
    ServerName https://mysite.ru
 
и в файле etc/hosts (в windows) прописать строку
 
 
127.0.0.1  https://mysite.ru
 
Финал: авторизация через телеграмм должна заработать на ура!
 
Дополнительная статья, обзор по всем возможным интеграциям
 
id
first_name
last_name
username
photo_url
'telegram' => [
    'bot' => env('TELEGRAM_BOT_NAME'),  // The bot's username
    'client_id' => null,
    'client_secret' => env('TELEGRAM_TOKEN'),
    'redirect' => env('TELEGRAM_REDIRECT_URI'),
],
Если вы считаете текст данного блога оскорбительным или некорректным, напишите об этом по адресу IntegralAL@mail.ru с URL-адресом блога. В теме письма пишите <Жалоба>, либо <Неккоректно>.

Теги блога:

Программирование
Инженерия
php
Назад к блогам