vk_api icon indicating copy to clipboard operation
vk_api copied to clipboard

AuthError: Unknown error (AUTH; no sid)

Open green-solutions-lab opened this issue 10 months ago • 16 comments

Добрый день! Подскажите, как обходить ошибку: AuthError: Unknown error (AUTH; no sid)? Возникает при стандартной авторизации по логину и паролю.

green-solutions-lab avatar Mar 05 '25 11:03 green-solutions-lab

Добрый день. Установите версию из гитхаба, а не из pypi

kyzima-spb avatar Mar 06 '25 22:03 kyzima-spb

и толку? стало вылетать другая ошибка: Ошибка авторизации: Failed to get the value of variable window.init.

chOng-m0rrino avatar Apr 02 '25 17:04 chOng-m0rrino

и толку? стало вылетать другая ошибка: Ошибка авторизации: Failed to get the value of variable window.init.

толк в том, что в гите актуальная версия, а на pypi нет

проверил, все работает отлично

смотрите что у вас с сетью, ошибка "Failed to get the value of variable window.init" говорит о том, что не загружается страница https://m.vk.com/join?vkid_auth_type=sign_in

kyzima-spb avatar Apr 02 '25 18:04 kyzima-spb

Сеть есть, Страница открывается. Обновился до мастер версии.. Ошибка авторизации: Failed to get the value of variable window.init.

chOng-m0rrino avatar Apr 02 '25 18:04 chOng-m0rrino

Страница открывается

она может открываться в браузере, но при попытке загрузить из библиотеки столкнуться с блокировкой со стороны ВК или какими-то иными сетевыми проблемами

нужно включить дебаг в библиотеке и проверить логи:

from vk_api.utils import enable_debug_mode
.....
enable_debug_mode(vk_session, print_content=True)

kyzima-spb avatar Apr 02 '25 18:04 kyzima-spb

Ох и портянка тут..

chOng-m0rrino avatar Apr 02 '25 19:04 chOng-m0rrino

Ох и портянка тут.. https://pastebin.com/yjELzySE

403 - Error, this is a private paste or is pending moderation. If this paste belongs to you, please login to Pastebin to view it.

kyzima-spb avatar Apr 02 '25 19:04 kyzima-spb

https://gist.github.com/chOng-m0rrino/249da9c803b002057701e9b52ce9afb4

интересно, вам возвращается вот такая страница

тут я уже затрудняюсь в ответе, профиль новый? заполнен?

kyzima-spb avatar Apr 02 '25 19:04 kyzima-spb

https://gist.github.com/chOng-m0rrino/249da9c803b002057701e9b52ce9afb4

интересно, вам возвращается вот такая страница !

тут я уже затрудняюсь в ответе, профиль новый? заполнен?

профилю больше 10 лет, заполнен, закрыт, гео не ру.

        logger.warning("[VK] Авторизация через логин и пароль.")
        self.vk_session = vk_api.VkApi(
            login=self.config['vk']['login'],
            password=self.config['vk']['password'],
            auth_handler=lambda: self.auth_handler(),
            captcha_handler=self.captcha_handler,
            app_id=6287487,
            client_secret="QbYic1K3lEV5kTGiqlq2",
            session=session
        )

        try:
            await asyncio.to_thread(self.vk_session.auth)
        except vk_api.AuthError as error_msg:
            logger.error(f"[VK] Ошибка авторизации: {error_msg}")
            return None, None

        self.config['vk']['token'] = self.vk_session.token['access_token']

    try:
        vk = self.vk_session.get_api()
        user_info = await asyncio.to_thread(vk.users.get, fields='id,first_name,last_name')
        if not user_info:
            logger.error("[VK] Не удалось получить информацию о пользователе.")
        else:
            self.print_vk_auth(user_info[0])

        group_id = self.config['global'].get('group_id')
        if group_id:
            group_info = await asyncio.to_thread(vk.groups.getById, group_id=group_id, fields='is_admin,is_member')
            if group_info:
                self.print_vk_group(group_info)
            else:
                logger.error(f"[VK GROUP] Не удалось получить информацию о группе {group_id}.")
        else:
            logger.warning("[VK GROUP] ID группы не указан в конфигурации.")

    except vk_api.AuthError as error_msg:
        self.auth_error(error_msg, 0)
        return None, None

    return self.vk_session, self.config['vk']['token']

def auth_handler(self):
    totp_code = self.generate_totp()
    if totp_code:
        key = totp_code
    else:
        key = input("[TOTP] Введите TOTP код вручную: ")
    remember_device = True
    return key, remember_device

def captcha_handler(self, captcha):
    logger.info("[CAPTCHA] Требуется ввод капчи.")
    logger.info(f"[CAPTCHA] Ссылка на капчу: {captcha.get_url()}")
    key = input(f"[CAPTCHA] Введите текст с картинки {captcha.get_url()}: ").strip()
    return captcha.try_again(key)

chOng-m0rrino avatar Apr 02 '25 20:04 chOng-m0rrino

профилю больше 10 лет, заполнен, закрыт, гео не ру.

на всякий случай, у вас там секретный ключ спалился, лучше удалить комментарий, если конечно это не тестовое приложение =)

такс, это я уже вечером туплю, он еще до профиля не дошел, поэтому не важно, заполнен или нет =)

в браузере в режиме инкогнито если открывать ссылку выше - такая же страница со скриншота?

Возможно это какое-то нововведение и скоро оно у всех появится, типо очередной вариации формы входа....

kyzima-spb avatar Apr 02 '25 20:04 kyzima-spb

app id и client secret от самого вк. Я подозреваю что может в client_secret дело, попробую без него завтра. Может они его изменили.

Cсылка https://m.vk.com/join?vkid_auth_type=sign_in сразу редирект на эту форму

Image

https://id.vk.com/auth?v=1.46.0&app_id=7934655&uuid=XXXXXX&redirect_uri=https%3A%2F%2Fm.vk.com%2Flogin&app_settings=W10%3D&action=eyJuYW1lIjoibm9fcGFzc3dvcmRfZmxvdyIsInBhcmFtcyI6eyJ0eXBlIjoic2lnbl9pbiIsIndpdGhfdmthcHAiOnRydWV9fQ%3D%3D&scheme=bright_light

если сменить app_id=7934655 на app_id=6287487 .. другая форма

chOng-m0rrino avatar Apr 02 '25 21:04 chOng-m0rrino

app id и client secret от самого вк. Я подозреваю что может в client_secret дело, попробую без него завтра. Может они его изменили.

я у себя с ними попробовал, зашел вроде как

сразу редирект на эту форму

такая и должна быть =)

Меня смущает другое, у вас в логе user-agent не такой, как по-умолчанию в библиотеке. И судя по коду, вы сами сессию создаете, а это может быть проблемой. Вот ваша строчка в логе и видно, что ответ 200

0.13 GET https://m.vk.com/join?vkid_auth_type=sign_in {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'remixlang=3; remixstlid=9094375928467462456_YhyeyvaSg5tfqVcBU9YOmgL8zhddTvWU1GMvHU8AEfg; remixstid=305159167_byuoC1ZUjw9ZZBGvTUrctZXv0it2PJB5qQZYfWWMg2D; remixua=-1%7C-1%7C336%7C2196054523; remixff=0; remixmdevice=1920/1080/2/!!-!!!!'} None 200 []

А вот мой лог и ответ 302

0.18 GET https://m.vk.com/join?vkid_auth_type=sign_in {'User-agent': 'Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'remixlang=0; remixstlid=9051310273957241111_XlyVszBbOwnJ3WGrljUeVQgyvupOdpVs9Stn2bD3Mwc; remixlgck=607e058539a2e56fa5; remixua=43%7C-1%7C333%7C2770062563; remixstid=151919067_mIXzj0LAoPiPCecGdEgtiAZBMLbzVvQxvptstwfz32H; remixmdevice=1920/1080/2/!!-!!!!'} None 302 []

Я замечал, что ВК не любит curl, возможно он не любит и requests, попробуйте в своей сессии изменить user-agent, либо отказаться, хотя бы в тестовых целях, от своей сессии

kyzima-spb avatar Apr 02 '25 23:04 kyzima-spb

да ничего не меняется. Failed to get the value of variable window.init. ... что то с либой не иначе!

chOng-m0rrino avatar Apr 03 '25 03:04 chOng-m0rrino

Фух. Начал все с начала и смог успешно авторизоваться и получить токен. Удалил под ноль старую pip uninstall vk-api -y и накатил с мастера pip install git+https://github.com/python273/vk_api.git@master. и Заработало!

import asyncio
import logging
import vk_api
from vk_api.exceptions import AuthError, VkApiError, TwoFactorError
import requests
import pyotp

class VKAuth:
    def __init__(self):
        
        self.LOGIN = "7XXXXXXXXX"  # ← Ваш номер телефона
        self.PASSWORD = "XXXXXXXX"  # ← Ваш пароль
        self.TOTP_KEY = "XXXXXXXXXXXXX"  # ← Секретный ключ 2FA (Google Authenticator)
        
        self.APP_ID = 6287487  # ID приложения
        self.CLIENT_SECRET = "QbYic1K3lEV5kTGiqlq2"  # Секретный ключ
        
        self.session = requests.Session()
        self.session.headers.update({
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'
        })

    async def auth(self):
        logger.info("НАЧАЛО ПРОЦЕССА АВТОРИЗАЦИИ")
        
        try:
            # 1. Проверка IP
            await self.log_connection_ip()
            
            # 2. Создаем сессию VK
            vk_session = vk_api.VkApi(
                login=self.LOGIN,
                password=self.PASSWORD,
                auth_handler=self.auth_handler,
                captcha_handler=self.captcha_handler,
                app_id=self.APP_ID,
                client_secret=self.CLIENT_SECRET,
                scope="offline",
                session=self.session
            )
            
            # 3. Авторизация
            logger.debug("ВЫПОЛНЕНИЕ АВТОРИЗАЦИИ")
            await asyncio.to_thread(vk_session.auth, token_only=True)
            logger.debug("АВТОРИЗАЦИЯ ЗАВЕРШЕНА")
            
            # 4. Проверка токена
            if not vk_session.token.get('access_token'):
                raise AuthError("Получен пустой access_token")
                
            # 5. Проверка работоспособности
            vk = vk_session.get_api()
            user = await asyncio.to_thread(vk.users.get)
            logger.info(f"Авторизация успешна! Пользователь: {user[0]['first_name']} {user[0]['last_name']}")
            
            return vk_session
            
        except TwoFactorError as e:
            logger.error(f"[2FA ОШИБКА] {e}")
        except AuthError as e:
            logger.error(f"[ОШИБКА АВТОРИЗАЦИИ] {e}")
        except VkApiError as e:
            logger.error(f"[VK API ОШИБКА] {e}")
        except Exception as e:
            logger.exception("Непредвиденная ошибка:")
            
        return None

    def auth_handler(self): # Обработчик двухфакторной аутентификации
        if self.TOTP_KEY:
            totp = pyotp.TOTP(self.TOTP_KEY)
            code = totp.now()
            logger.info(f"[2FA] Используется код: {code}")
            return code, True  # Код и запомнить устройство
        else:
            code = input("[2FA] Введите код из SMS/приложения: ")
            return code.strip(), True

    def captcha_handler(self, captcha): # Обработчик CAPTCHA
        logger.warning(f"[CAPTCHA] Требуется ввод: {captcha.get_url()}")
        code = input("[CAPTCHA] Введите текст с картинки: ").strip()
        return captcha.try_again(code)

    async def log_connection_ip(self):
        try:
            response = await asyncio.to_thread(
                self.session.get,
                "https://api.ipify.org?format=json"
            )
            ip_data = response.json()
            logger.info(f"[IP] Текущий IP: {ip_data.get('ip')}")
        except Exception as e:
            logger.error(f"[IP ОШИБКА] {e}")

if __name__ == "__main__":
    async def main():
        auth = VKAuth()
        vk_session = await auth.auth()
        if vk_session:
            print("УСПЕХ! Токен:", vk_session.token['access_token'])
        else:
            print("АВТОРИЗАЦИЯ НЕ УДАЛАСЬ")

    asyncio.run(main())

chOng-m0rrino avatar Apr 06 '25 14:04 chOng-m0rrino

Авторизация через access_token (без емайла и пароля) решает проблему

Kuaranir avatar Apr 19 '25 18:04 Kuaranir