This commit is contained in:
Vladimir Voronin
2024-10-25 14:56:59 +03:00
parent 5fae4c2939
commit 4cfc43c8b0

View File

@@ -2,7 +2,7 @@
<div class="flex items-center justify-center h-screen bg-gray-100">
<div class="w-full max-w-sm p-6 bg-white rounded-lg shadow-md">
<h2 class="text-2xl font-bold text-center mb-6">Вход</h2>
{{tg_id}}
{{ tg_id }}
<form @submit.prevent="login">
<div class="mb-4">
<label class="block text-gray-700 text-sm font-bold mb-2" for="username">Логин</label>
@@ -37,41 +37,65 @@
<script setup lang="ts">
import qs from 'qs';
import {computed, ref} from 'vue';
import {useRoute, useRouter} from 'vue-router';
import { computed, ref, onMounted } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import apiClient from '@/services/axiosSetup';
const username = ref('');
const password = ref('');
const router = useRouter();
const route = useRoute()
console.log(route.query['back'])
const route = useRoute();
// Получение tg_id
const tg_id = computed(() => {
if (window.Telegram.WebApp) {
if (window.Telegram?.WebApp) {
const tg = window.Telegram.WebApp;
tg.expand(); // Разворачиваем веб-приложение на весь экран
// Получаем информацию о пользователе и выводим её
return tg.initDataUnsafe.user.id
tg.expand(); // Разворачиваем приложение на весь экран
return tg.initDataUnsafe.user?.id ?? nul; // Если tg_id нет, возвращаем null
}
else return 567047
})
return null;
});
// Функция для автоматического входа по tg_id
const autoLoginWithTgId = async () => {
if (tg_id.value) {
try {
const response = await apiClient.post('/auth/token/tg?tg_id=' + tg_id.value );
const token = response.data.access_token;
localStorage.setItem('token', token);
apiClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;
await router.push(route.query['back'] ? route.query['back'].toString() : '/');
} catch (error) {
console.error(error);
alert('Ошибка входа. Проверьте логин и пароль.');
}
}
};
// Вызов autoLoginWithTgId при загрузке компонента
onMounted(() => {
autoLoginWithTgId();
});
// Основная функция для логина
const login = async () => {
try {
let response: string
if (tg_id.id){
let response;
if (tg_id.value) {
response = await apiClient.post('/auth/token/tg', qs.stringify({ tg_id: tg_id.value }));
} else {
response = await apiClient.post('/auth/token', qs.stringify({ username: username.value, password: password.value }));
response = await apiClient.post('/auth/token', qs.stringify({
username: username.value,
password: password.value,
}));
}
const token = response.data.access_token;
localStorage.setItem('token', token);
apiClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;
await router.push(route.query['back']? route.query['back'] : '/');
await router.push(route.query['back'] ? route.query['back'].toString() : '/');
} catch (error) {
console.log(error)
console.error(error);
alert('Ошибка входа. Проверьте логин и пароль.');
}
};