Это тема создана для тех кто создает WebApp Серверная часть "use server"; import crypto from "crypto"; const verifyTelegramData = async ({ iniData, botToken, }: { iniData: any; botToken: any; }) => { const { auth_date, hash, query_id, user } = iniData; const dataCheckString = Object.keys({ auth_date, query_id, user }) .sort() .map((key) => `${key}=${{ auth_date, query_id, user }[key]}`) .join("\n"); const secretKey = crypto .createHmac("sha256", "WebAppData") .update(botToken) .digest(); const computedHash = crypto .createHmac("sha256", secretKey) .update(dataCheckString) .digest("hex"); return computedHash == hash; }; export default verifyTelegramData; JS "use server"; import crypto from "crypto"; const verifyTelegramData = async ({ iniData, botToken, }: { iniData: any; botToken: any; }) => { const { auth_date, hash, query_id, user } = iniData; const dataCheckString = Object.keys({ auth_date, query_id, user }) .sort() .map((key) => `${key}=${{ auth_date, query_id, user }[key]}`) .join("\n"); const secretKey = crypto .createHmac("sha256", "WebAppData") .update(botToken) .digest(); const computedHash = crypto .createHmac("sha256", secretKey) .update(dataCheckString) .digest("hex"); return computedHash == hash; }; export default verifyTelegramData; После этого кидаем туда данные которые получили от тг Клиентская часть const handleUser = async () => { let initData = Telegram.WebApp.initData; const response = await verifyTelegramData({ iniData: parse(initData), botToken: process.env.NEXT_PUBLIC_BOT_TOKEN, }); console.log(response); }; useEffect(() => { handleUser(); }, []); JS const handleUser = async () => { let initData = Telegram.WebApp.initData; const response = await verifyTelegramData({ iniData: parse(initData), botToken: process.env.NEXT_PUBLIC_BOT_TOKEN, }); console.log(response); }; useEffect(() => { handleUser(); }, []); И так response вернет на true если пользователь от зашел по телеграм а если кто-то попробует сменить данные наебать вас то у него ничего не получится