Почему VK ID возвращает почту для уведомлений вместо основной
При авторизации через VK ID разработчики часто сталкиваются с ситуацией: API возвращает не основную почту пользователя, а адрес для уведомлений. Это вызывает путаницу, особенно если на сайте ожидается email, указанный при регистрации. В этой статье объясняем причины такого поведения и даём практическое решение.
Как устроена система почт в VK ID
В профиле VK ID у каждого пользователя может быть два email-адреса:
- Основная почта - адрес, указанный при регистрации или изменённый вручную. Используется для входа и восстановления доступа.
- Почта для уведомлений - адрес, на который приходят системные сообщения, например, о новых сообщениях или событиях. Часто это внутренний адрес вида @vk.com.
По умолчанию метод users.get с полем email возвращает именно почту для уведомлений, а не основную. Это задокументировано в API VK, но не всегда очевидно для разработчиков.
Как получить основную почту через VK API
Чтобы получить основную почту пользователя, необходимо использовать специальный метод account.getProfileInfo. Он возвращает расширенную информацию об аккаунте, включая поле email, которое содержит именно основной адрес. Пример запроса:
https://api.vk.com/method/account.getProfileInfo?access_token=TOKEN&v=5.131В ответе вы получите JSON с объектом, где поле email - это основная почта. Убедитесь, что у вашего приложения запрошены права доступа email при авторизации.
Права доступа (scope) для получения email
При инициализации VK ID на сайте необходимо указать параметр scope: 'email'. Без этого разрешения API не вернёт адрес вообще. Пример на JavaScript:
VKID.init({
scope: 'email',
// другие параметры
});После успешной авторизации токен будет содержать доступ к email, и вы сможете получить основную почту через account.getProfileInfo.
Почему возвращается почта для уведомлений: частые ошибки
- Использование устаревшего метода -
users.getне предназначен для получения основной почты. - Отсутствие scope email - без явного запроса прав API не отдаёт email.
- Кэширование данных - иногда старый токен содержит неверные данные. Попробуйте обновить токен.
Проверка на стороне пользователя
Если вы хотите убедиться, какой email считается основным, предложите пользователю зайти в настройки VK ID. Там отображается основной адрес, а также можно изменить почту для уведомлений. Это поможет отладить логику на вашем сайте.
Заключение
Чтобы получать основную почту пользователя VK ID, используйте метод account.getProfileInfo с правами доступа email. Избегайте вызова users.get для этой цели - он возвращает только почту для уведомлений. Следуя этим рекомендациям, вы решите проблему и обеспечите корректную работу авторизации на сайте.