42 lines
2.1 KiB
Dart
42 lines
2.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_web_auth/flutter_web_auth.dart'; // Для аутентификации через веб
|
|
import 'package:shared_preferences/shared_preferences.dart'; // Импортируем для работы с локальным хранилищем
|
|
import 'package:http/http.dart' as http; // Для HTTP запросов
|
|
import 'dart:convert'; // Для работы с JSON
|
|
|
|
class TelegramAuth {
|
|
static const String _telegramBotToken = 'YOUR_TELEGRAM_BOT_TOKEN'; // Замените на ваш токен бота
|
|
static const String _telegramLoginUrl = 'https://telegram.me/YOUR_BOT_NAME'; // Замените на URL вашего бота
|
|
|
|
// Метод для аутентификации через Telegram
|
|
static Future<void> loginWithTelegram(BuildContext context) async {
|
|
final result = await FlutterWebAuth.authenticate(
|
|
url: '$_telegramLoginUrl',
|
|
callbackUrlScheme: 'yourapp', // Замените на ваш callback URL scheme
|
|
);
|
|
|
|
// Получаем код авторизации из URL
|
|
final code = Uri.parse(result).queryParameters['code'];
|
|
|
|
// Отправляем код на сервер для проверки
|
|
final response = await http.post(
|
|
Uri.parse('https://api.telegram.org/bot$_telegramBotToken/getMe'),
|
|
body: {'code': code},
|
|
);
|
|
|
|
if (response.statusCode == 200) {
|
|
// Успешная аутентификация
|
|
final userData = json.decode(response.body);
|
|
// Сохраняем данные пользователя в локальном хранилище
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.setInt('userId', userData['id']); // Сохраняем ID пользователя
|
|
await prefs.setString('userName', userData['name']); // Сохраняем имя пользователя
|
|
await prefs.setString('userEmail', userData['email']); // Сохраняем email пользователя
|
|
print('User data: $userData');
|
|
} else {
|
|
// Ошибка аутентификации
|
|
print('Error logging in with Telegram: ${response.body}');
|
|
}
|
|
}
|
|
}
|