Авторизация в VK с помощью логина и пароля в Python.

Пишу в продолжение этой статьи:

Предыдущий пример работы с VK API имеет существенный недостаток: очень сложная авторизация ВКонтакте. Приходилось делать запрос в браузере и получать ключ доступа вручную.

Гораздо удобнее, когда авторизация происходит с помощью логина и пароля. А последующие авторизации уже происходят с помощью сохранённого ключа доступа.

Вот решил написать очень простой пример как это сделать в Python-е.

Описание задачи и пути решения.

Практически для любых действий с VK API требуется авторизация. Поэтому поставлена задача реализовать авторизацию наиболее удобным способом, а именно, с помощью логина и пароля.

Для того, чтобы не приходилось каждый раз вводить логин и пароль было решено сохранять ключ доступа в текстовом файле. Это не единственный и не самый безопасный способ, но зато самый простой, особенно для первой реализации.

Файл программы предполагается использовать использовать двумя путями: в качестве самостоятельного консольного приложения и в качестве библиотеки для последующих примеров использования VK API.

В качестве самостоятельного консольного приложения программа будет просто сообщать удалась авторизация или нет

Итак, используем следующий основной алгоритм:

  • Если текстовый файл существует,
    • то считываем из него ключ доступа.
  • Иначе
    • авторизируемся с помощью логина и пароля,
    • сохраняем ключ доступа в текстовый файл.
  • Используем ключ доступа для работы с VK API

Простое консольное приложение авторизация в VK на Python-е.

Для начала пошёл по самому простому пути и сделал консольное приложение.

Приложение использует общедоступную библиотеку vk. Так что, если вы её ещё не установили, то это нужно сделать:

pip3 install vk --user

Для запуска необходимо в командную строку вбить строчку:

python3 auth_vk.py

После чего приложение запросит логин и пароль и выдаст результат:

Конечно, в таком виде использовать приложение довольно бессмысленно так, как оно ничего не делает, кроме авторизации. Его предполагается использовать в качестве библиотеки. Как это делается будет в следующих примерах.

Приложение использует access_token сохранённый в текстовом файле auth_vk.ini. При первом запуске (т.е. когда файл не удаётся найти) или когда access_token не подходит, используется авторизация с помощью логина и пароля.

При последующем запуске авторизация происходит автоматически.

 Будьте осторожны! Приложение создаёт вечный access_token. Не передавайте файл кому попало. 

Чтобы обезопасить себя, вы всегда можете отменить действующие токены и выйти из всех приложение с помощью функции ВК «Завершить все сеансы».

Разбор кода примера авторизации в ВК на Python-е.

Весь примера находится в файле ‘auth_vk.py’. Этот файл предполагается использовать в качестве модуля. В этом модуле будет всего две функции:
1) auth_vk_token() — авторизация с помощью сохранённого в файле ключа доступа (access_token);
2) auth_vk_password() — авторизация с помощью логина и пароля.

Функция auth_vk_password()

def auth_vk_password():
    session = vk.AuthSession(app_id=APP_ID, user_login=input("user_login: "), user_password=input("user_password: "))
    file = open("auth_vk.ini", 'w')
    file.writelines(session.access_token)
    return session

Данная функция использует метод ‘AuthSession‘ библиотеки vk для авторизации в ВК с помощью логина и пароля. После успешной авторизации, мы получаем ключ доступа (access_token) и сохраняем его в файле ‘auth_vk.ini’. Функция возвращает Сессию — объект библиотеки vk.

session = vk.AuthSession(app_id=APP_ID, user_login=input("user_login: "), user_password=input("user_password: "))

Метод ‘AuthSession‘ в качестве аргументов принимает ID приложения в ВК. Следующие аргументы соответственно логин и пароль от вашего аккаунта ВК. Я их получаю с помощью встроенной функции input().

Функция auth_vk_token()

def auth_vk_token():
    try:
        file = open("auth_vk.ini", 'r')
    except IOError as e:
        access_token = auth_vk_password().access_token
    else:
        access_token = file.readline()

    session = vk.Session(access_token=access_token)

    return session

Данная функция пытается прочесть файл ‘auth_vk.ini‘, чтобы получить ключ доступа (access_token). Если это не удаётся, то вызывается функция описанная выше (auth_vk_password()), чтобы авторизоваться с помощью логина и пароля. Функция возвращает Сессию.

Эта функция не анализирует актуальность ключа доступа.