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

View File

@@ -37,41 +37,65 @@
<script setup lang="ts"> <script setup lang="ts">
import qs from 'qs'; import qs from 'qs';
import {computed, ref} from 'vue'; import { computed, ref, onMounted } from 'vue';
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import apiClient from '@/services/axiosSetup'; import apiClient from '@/services/axiosSetup';
const username = ref(''); const username = ref('');
const password = ref(''); const password = ref('');
const router = useRouter(); const router = useRouter();
const route = useRoute() const route = useRoute();
console.log(route.query['back'])
// Получение tg_id
const tg_id = computed(() => { const tg_id = computed(() => {
if (window.Telegram.WebApp) { if (window.Telegram?.WebApp) {
const tg = window.Telegram.WebApp; const tg = window.Telegram.WebApp;
tg.expand(); // Разворачиваем веб-приложение на весь экран tg.expand(); // Разворачиваем приложение на весь экран
return tg.initDataUnsafe.user?.id ?? nul; // Если tg_id нет, возвращаем null
// Получаем информацию о пользователе и выводим её
return tg.initDataUnsafe.user.id
} }
else return 567047 return null;
}) });
const login = async () => { // Функция для автоматического входа по tg_id
const autoLoginWithTgId = async () => {
if (tg_id.value) {
try { try {
let response: string const response = await apiClient.post('/auth/token/tg?tg_id=' + tg_id.value );
if (tg_id.id){
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 }));
}
const token = response.data.access_token; const token = response.data.access_token;
localStorage.setItem('token', token); localStorage.setItem('token', token);
apiClient.defaults.headers.common['Authorization'] = `Bearer ${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) { } catch (error) {
console.log(error) console.error(error);
alert('Ошибка входа. Проверьте логин и пароль.');
}
}
};
// Вызов autoLoginWithTgId при загрузке компонента
onMounted(() => {
autoLoginWithTgId();
});
// Основная функция для логина
const login = async () => {
try {
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,
}));
}
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('Ошибка входа. Проверьте логин и пароль.'); alert('Ошибка входа. Проверьте логин и пароль.');
} }
}; };