Получение email пользователя через API Вконтакте

    Всем доброго времени суток!


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

    Хоть и занимаясь веб разработкой, да и программированием в целом не так давно, мне все же пришлось столкнуться с API социальных сетей, таких как Facebook и Вконтакте. Робота с «лайками» и другими данными проходила на ура. Но вот, попал в тупиковую ситуацию: как мне связать пользователей в общий аккаунт(проблема была следующая Вконтакте, в отличии от своего старшего брата, упорно не хотел отдавать email пользователя). Перечитав множество, форумов, разнообразных FAQ, пришел к выводу, что это все же невозможно. Мол, разработчики социальной сети, не хотят выдавать столь конфиденциальную информацию о своих пользователях. С этим пришлось смириться. Поставленная задача была решена другим способом, а в душе затаилась небольшая обида.

    Но, мой пост, немного не об этом. Буквально сегодня наткнулся на следующий сайт: afisha.ru. На первый взгляд обычный сайт на просторах рунета. Но самое интересное для меня было внутри, когда я решил войти под пользователем.

    Что бы долго не регистрироваться, я быстро нажал кнопку войти через Вконтакт и тут меня ждало первое удивление, стандартное окно, для запроса прав к приложению, не считая того, что оно может получить мой email.
    image

    После этого в личном кабинете, в личных данных, спокойно высветился, мой email.
    Полез в интернет, там ни каких новостей нет на эту тему, в разделе Конаткта про API тоже тишина.

    Новостей, про сто что Контакт все же отдает email, я не нашел.

    Так что же, скоро и они нас этим порадуют? или это последствия апокалипсиса Майя?
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 40
      –11
      Для чего эта запятая в заголовке?
        +4
        Спасибо, не заметил. Уже исправил. Разлил кофе и кнопка живет своей жизнью.
        +7
        то чего в статье не хватает: ...&scope=offline,wall,friends,email&... права используемые при регистрации Афишей.
          +1
          Не подумал. А изменения списка прав результата не дали.
            +1
            Подтверждаю. Попробовал своему приложению такой список прав задать — не сработало.
          +6
          Все очевидно же: афиша каким-то образом сотрудничает с ВКонтакте.

          Простым типичным сайтам данная возможность недоступна.

          Более точную информацию уточняйте в тех. поддержке ВКонтакте.
            –7
            скорее всего они работают напрямую с ФСБ, откуда и получают все персональные данные пользователя (email, домашний адрес, мобильный итп).
            • НЛО прилетело и опубликовало эту надпись здесь
                +8
                недоработка ФСБ!
            0
            Для «избранных» апи контакта немного богаче. Например можно отправлять посты на стену с сервера (wall.post). Но попасть в список этих самых «избранных» простому смертному нереально.
              0
              Отправлять с сервера можно всем, читайте.
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  Именно. На всякий случай даже перепроверил: Permission to perform this action is denied for non-standalone applications: you should request token using blank.html page
                  Хотя приложение создавал как standalone.
                    +1
                    Вот один раз, через этот blank.html нужно получить токен, а дальше сделать так, чтобы он указывался в запросах к API.
                    Давно уже не использовал API вконтакта, но только что перепроверил процедуру, указанную в статье по ссылке выше — все заработало. Хоть на свою стену, хоть на стену своей группы/публичной страницы.
                    Надо отметить, что я шлю запросы на api.vk.com/method/, как указано на этой странице документации. Собственно, там и видно, что из секретных кодов требуется только ранее полученный access_token.
                      0
                      А не подскажите, blank.html подразумевается вконтактовый? Или на стороне моего сервера?
                      В первом случа непонятно как токен выдрать на стороне сервера.
                        +1
                        blank.html будет вконтактовый.
                        Чтобы получить токен, нужно сначала получить адрес, куда вконтакт перенаправил запрос, как-то так: stackoverflow.com/questions/4062819/curl-get-redirect-url-to-a-variable

                        А дальше его распарсить и получить токен.
                          0
                          Не совсем понял:
                          1) формируем спец ссылку для авторизации с blank.html и перенаправляем туда пользователя
                          2) пользователь подтверждает права
                          3) вконтакт со своей же странички редиректит на свою blank.html страницу
                          Между 2 и 3 все происходит без участия моего сервера или нет?
                            0
                            Честно говоря, не использовал API вконтакта для многопользовательской работы, только так, как написано в моей статье. Насколько понимаю, у вас есть сайт, где авторизуются пользователи, и далее вы хотите с сервера выполнять некоторые действия для этих пользователей. В документации отлично описан этот способ авторизации — vk.com/dev/auth_sites, и показано, что можно указывать свой адрес для редиректа.

                            Но учитывая тему ветки комментариев — использование метода wall.post, хочу сказать, что насколько я помню, сайтам нельзя использовать эти методы. Только standalone-приложениям.

                            Вот сейчас проверил документацию: vk.com/dev/wall.post

                            Данный метод доступен только Standalone-приложениям и web-приложениям, использующим окно подтверждения.


                            Сторонним сайтам можно использовать, но только используя такое окно подтверждения. Значит, если не ошибаюсь, со стороны сервера нельзя:
                            Доступ к некоторым методам, предназначенным для вызова из Standalone-приложений, может быть получен также из Flash/IFrame-приложений и сторонних сайтов. При этом автоматически будет инициализировано окно для подтверждения действия пользователем.

                            Все, что я сейчас написал — чисто теория, которую необходимо проверять эксперментально. В помощь вам документация по работе с вконтактом :)
                              0
                              Документацию я прочитал, сделал standalone приложение (хотя у меня как бы и веб-сайт), которому для полноты ощущений надо получать токен именно через blank.html, сотвественно красиво и без хакерства такое не провернуть (заодно и бан влепят), а обычный oauth с редиректом на свой домен урезает функционал и толку от работы с API вконтакта просто нет.
                              Попутно выяснилось что куча проблем с загрузкой картинок, то ли токен не тот, то ли 3 строчки curl кода хитрее должны быть.
                              В общем мы решили забить на VK, много гемороя и ограничений для красивой и правильной реализации, FB к примеру за пару секунд подключил и всё работает как надо.
                    0
                    Я тоже это имел ввиду.
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Понял о чем вы. Хотя мне казалось, изначально спрашивалось просто об отправке с сервера.
                +2
                У контакта есть недокументированные возможности. Например, нигде не написано, но негласно многим известно, что можно автоматически парсить на стену группы вконтакте RSS со своего сайта, если на сайте есть хотя бы один виджет от контакта (для этого необходимо написать в поддержку, и в настройках группы после проверки включат такую настройку)
                  0
                  Я уж подумал, что статья про уязвимость. Из того, что я видел, давно уже на Badoo такое же.
                  На основе договорённостей отдельным прилам дают доступ к email.
                  Общедоступно уверен не стоит ждать, несёт много проблем юзерам.
                    +1
                    Ну Facebook живет и ничего, никто не жалуется.
                    +3
                    Думал, Вы потешите очередной уязвимостью. Увы, видимо, не мой сегодня день.
                      0
                      Вконтакте не отдает email еще и потому, что он не у всех есть, у кого-то привязан только телефон.
                        0
                        На facebook тоже не у всех есть email. Для тех, у кого нет, отдается username@facebook.com — письма на этот ящик приходят как личные сообщения.
                          0
                          А можно поподробнее про случай, когда на фб нет email и в API отдается username@facebook?
                            0
                            А, что подробнее, не у всех пользователей Фейсбука есть email. И в таком случае пользователю присваивается эмайл вида, как упомянуто в сообщении выше username@facebook.com. Но прямого доступа к этому ящику нет. Все сообщения пришедшие на этот ящик, приходят как личные сообщения в ФБ.
                        +1
                        А я уже обрадовался, что ВК начал отдавать мейлы как фейсбук. Но не судьба
                          0
                          VK мог бы выдавать хешь email'а, чтобы можно было привязать пользователя заходящего через VK к его аккаунту на сайте.

                          А для связи с новыми пользователями подошёл бы email от VK, вроде username@vk.com
                            0
                            Кстати, сейчас получение email доступно всем приложениям (привет П.Дуров), если указать одноименный скоуп «email».

                            Только вот проблема одна возникла.

                            У меня несколько проектов на Ruby on Rails.
                            В одном я использую gem «oauth2» для авторизации, который в callback-метод получает этот самый email, всё классно.
                            А в другом проекте используются «devise» + «omniauth-vkontakte» (и другие «omniauth-...»), и никак не получается достать почтовый адрес, где-то теряется на полпути. Если вдруг кто-то в теме – буду признателен. Заранее спасибо.
                              0
                              Уже наладили ребята всё этим коммитом.
                              Можно пользоваться по-человечески.
                                0
                                «Доступ к email пользователя. Доступно только для сайтов.»

                                Из официальной документации.
                                  0
                                  Да, речь именно о них.
                                0
                                Хм… Интересно, насчет доступности emaila — ранее не слышал. Сегодня нужно будет проверить. Спасибо за информацию.
                                  0
                                  Ага, работает! Правда, только с новыми приложениями. Надо указать scope 'email' и забрать при получении access_token (https://vk.com/dev/auth_sites).
                                  0
                                  Разобрался с этой проблемой!
                                  Вконтакте выдает емайл при получении токена.
                                  И то может не отдать, потому что, во вконтакте, емайл — это не обязательное поле у юзера, его может просто не быть!

                                  Так что все работает, просто есть ньюансы сбивающие с толку!
                                    +1
                                    На момент написания статьи, было немного по другому. Не было такой привязки по телефону, а только по эмайлу.

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое