Pull to refresh

Comments 79

А возможно ли таким образом получить имя пользователя хотя бы?
Можно, но через Javascript API лишь (прошу поправить, если я не прав, но в документации про это ни слова).
Т.е., видимо, если хочется сохранить Имя пользователя Вконтакте — нужно сначала получить его через Javascript, а после — отправить результат в свое приложение.
ссылку не подскажете где посмотреть про этот Javascript API?
У меня в голове возникает только один вопрос: Почему документация по технологиям разбросана по всему интернету? То userapi.com / userapi.ru / durov.at и т.д. Что нельзя это в один раздел запихнуть?? например dev.vkontakte.ru
Хороший вопрос. Качество документации и ее разброс по всему инет, а также отсутствие не то что поддержки, а даже пути баг репорта — наводит на плохие мысли.
UFO just landed and posted this here
Зачем это разработчикам сайтов? Вход через вконтакте — это гораздо понятее для пользователя, чем вход через OpenID, и это большой шаг вперед по сравнению со стандартной «email-пароль-активация» схемой.

Зачем это разработчикам vkontakte? Думаю, что вот за этим.
Извините, но OpenID это уже более высокий уровень универсальности, чем некая социальная сеть.
Извините, а сколько пользователей целевой аудитории Вашего сайта хотя бы слышали что такое openID? И у скольки он есть?
т.е в теории доверять этой информации смысла нет?
id пользователя точно получишь достоверный, это главное, а данные которые попадут в бд через js — не принципиально вбиты они пользователем через форму или попали автоматически через интеграцию с вконтактом. Дело удобства.
Кстати, все таки есть адрес api.vkontakte.ru/api.php, на который можно посылать команды для совершения внутренних действий, например перевести голоса от приложения пользователю и получить результат операции, возможно поддерживаются и другие методы, например, для получения информации о пользователе (уже авторизовавшемся на вашем сайте через open api).

vkontakte.ru/pages.php?o=-1&p=%C7%E0%F9%E8%F9%E5%ED%ED%EE%E5%20%E2%E7%E0%E8%EC%EE%E4%E5%E9%F1%F2%E2%E8%E5%20%EF%F0%E8%EB%EE%E6%E5%ED%E8%FF%20%F1%20API
К сожалению это только для secure методов. Данные о пользователе вы таким образом получить не сможете.
Хотя, может в последних версиях API что-то поменялось.
с помощью getProfiles через secure тоже можно получить данные о пользователе.
Спасибо, сегодня попробую добавить в код получение данных о пользователе.
UFO just landed and posted this here
UFO just landed and posted this here
А вот тут вопрос о безопастрости такого решения: я почитал документацию OpenAPI, и не нашел никаких данных о подписи ответных данных от API. Иными словами любой может подделать информацию о себе, которая будет получаться через Javascript (например подделать результат запроса getProfiles).

Если я не прав, поправьте меня.
UFO just landed and posted this here
Сказать можно много в ответ. Но я лишь спрошу — как с получением email?
Судя по всему, никак. Да и слишком большой дырой в безопасности было бы давать email пользователей сторонним сайтам.
Для блога например авторизация нафиг не нужна. Нужна идентификация и мыло.
А насчет дыры — поясните, если не трудно.
Назвав это «дырой», я конечно, немного преувичил, но вряд ли вконтакте будет отдавать всем кому попало email'ы своих пользователей. Если я не прав и вконтакте уже это делает — пожалуйста, поправьте, кто может =)
Что значить кому попало?

Человек хочет авторизоваться на сайте. Он может это сделать вручную введя вся данные, подтвердив мыло и так далее. Либо подтвердив свои данные через сторонний сервис в два клика.

Проблема в том что мне надо знать 1. Имя 2. Мыло — так уж устроен сайт ( да и большинство сайтов в инете ). Мне даже пофиг будет ли мыло настоящее :)
записывайте к себе в базу email для пользователей, которые авторизуются через вконтакт, например: id@vkontakte.ru. Ну а на будущее — у каждого пользователя вконтакте будет свой email вида: nickname@vkontakte.ru. Думаю nickname можно будет узнать через api.
Думаю nickname можно будет узнать через api.
уже можно
Facebook например предоставляет «кому попало» и е-мейл и даже место жительства, конечно же из соглашения пользователя для каждого отдельного веб-сайта
Ну, фактически, вы получаете доступ к id пользователя, что (после приложения минимума усилий) позволяет вам связаться с ним прямо на vkontakte.
После входа пользователя вконтакте перекидываем его на отдельную страницу (в моем случае это vk.php), где проверяем, зарегистрирован ли уже пользователь с таким vk_id. Если нет — показываем ему упрощенную форму регистрации (например, только логин и email). После чего создаем пользователя и перекидываем только что зарегистрированного посетителя на главную страницу.

Достаточно большая вероятность того, что введенный e-mail совпадет с контактовским. Я бы сказал о 80-90 процентах. Впрочем это имхо.
программными методами с вашей стороны есть возможность реализовать слияние двух акканутов на вашем сайте ( вконтакте + пользователь вашего сайта ), если это один пользователь. Плюс возможность из личного кабинета пользователя привязать аккаунт вконтакте и авторизоваться в последующем через него. Главное — каким образом вы реализуете удобные и понятные для пользователя интерфейсы взаимодействия с вконтактом.
Поддерживаю насчёт документации. Не сразу въехал что к чему и тоже смог разобраться только по сайту durov.at
а можно обойтись как то без создания приложения? и вообще чего там за приложение надо? уж больно геморойно это всё =( а сделать надо
Приложение создать придется в любом случае, сделать это можно здесь: vkontakte.ru/apps.php?act=add&site=1
В целом — ничего сложного. Заполняете адрес сайта, получается id и password и заменяете ими те, что указаны в моем коде.
наверно чего то не так делаю: Open API security breach =((
спасибо =) теперь кука появилась, осталось прикрутить это всё добро к своей авторизировалки
Эта ошибка возникает, когда заданный в настройках URL отличается от фактического.
Приложение нужно для того, чтобы вы приняли условия соглашения от ВКонтакте. В частности, на сайтах, на которых используется вход через контакт, нельзя пользоваться никакой платежной системой, кроме контактовской.
Надеюсь, они поменяют такое нелепое правило.
Думаю, что для них это не нелепое правило, а основная причина, по которой стали городить весь этот огород с OpenAPI и не реализовали стандартный OpenID. Буду рад, если ошибаюсь. Но ни одной другой разумной причины найти не могу.
Я пока вижу причину в том, что это правило осталось от приложений, встроенных вконтакте. Такое ограничение для приложения, встроенного в эту соц сеть выглядит разумно.
М-м-м…

define ('VK_APP_ID', 'vk_app_1868779');
define ('VK_APP_PASSWORD', 'q2L3DWlLse0Wtah6nMTR');

А мож не стоит так вот делать, особенно в репозитории?
Это специальное приложение, которое я сделал именно для этого примера.
Приложение это настроено на URL openapi.lc, дабы упростить процесс настройки примера.
Думаю, это надо было засунуть в конструктор Auth_Vkontakte. Заодно и в примере было бы сразу видно, куда втыкать ИД и Пароль аппсы.

Также, если вы хотите вдальнейшем сделать из этого библиотеку, я бы порекомендовал убрать
public function render_login_form() {
return file_get_contents(«lib/login_form.html»);
}

Как-то уж совсем нехорошо. По сути ПХП только проверяет, залогинен пользователь или нет, а логин сам по себе происходит через хтмл форму. Для примера сойдет и так, хотя если будет отдельная библиотека, то как выглядит хтмл форма — уже не ее дело =)
Этот код был написан исключительно и специально для примера.
Форму тоже туда воткнул лишь для большей ясности, дабы собрать все в одном месте )
Самое сложное в этом вопросе — распознать оригинальную форму Контакта от подложки для кражи паролей. Потому как они тем самым открыли мегабрешь в безопастности. Я бы сказал, из стен укреплений, деликатно отодвинули 2 из 4-х. Две оставшиеся — для лохов.
Пользователей gmail в разы больше, чем вконтакта, однако они не торопятся авторизоваться на моем болге через свой мэйл. Вопрос доверия к ресурсу, а не удобстве пользования.
И чем их OpenID не устроил? Городят свою проприетарщину (еще Open API называют, вот в каком извините месте оно Open?), как будто пытаются завязать весь Интернет на себе. Не получится это у VKontakte, максимум что выйдет — отгородиться от Интернета толстой стенкой из пуленепробиваемых велосипедов.

Или может я просто чего-то не понимаю?..
OpenID это для аутентификации, а Open API для авторизации, но люди заодно используют это и как средство для аутентификации. Различается это всё тем что по идее после авторизации по Open API вы разрешаете сайту творить с вашим эккаунтом определённые действия, например изменять статус за вас или ещё какие то действия. Здесь больше уместно сравнение с технологией OAuth, чем с OpenID.

Но то что у них велосипед… Я бы не сказал, велосипед сделал FaceBook у которого они его и взяли, так что получается они не городили своё, а взяли уже готовую вещь (теоретически готовую).
Это сделано для того, чтобы каждый сайт, который подключает вход через vkontakte, согласовывал это действие с vkontakte. В процессе согласования на сайты накладываются некоторые ограничение: например, нельзя использовать сторонние платежные системы, можно только контактовскую. Т.е. если у вас прикручена робокасса или WebMoney, то вход через vkontakte вам не сделать (или сделать, но потом по правилам приложение отрубят и это будет epic fail — пользователи потеряют возможность входить в свои аккаунты). Можно еще сказать так: если у вас прикручен вход через вконтакте, то платежи через WebMoney в дальнейшем принимать на сайте будет нельзя, можно будет только через их собственную платежную систему. В случае OpenID так ограничить сайтовладельцев сложно.

habrahabr.ru/blogs/social_networks/92523/
Спасибо, всё работает! про мордокнигу конечно же пишите!
Я так понял, приложение одобрять не обязательно?
Не обязательно, главное просто создать.
eien.farm.lv

Вот настроенное приложение… Это если лень или не охота настраивать просто чтобы глянуть.

* Также заметил глюк: если не было куки для авторизации, то после ввода всех данных, в первый раз возвращает Auth error — но если нажать заново на кнопку (войти Вконтакте), тогда все в порядке, с чем это связано?

PS. Юзаю хром, также, чтобы проверить глюк можно использовать режим «инкогнито» в Вашем браузере.
Это глюк, я вчера пытался с ним бороться часа 3, даже репорты написал куда смог — не ответили. У меня в данном случае sig была undefined.
Решилась это проблема только когда перерегистировал приложение.
Странно, я попробую тоже…

Но, в ФФ все отлично работает… (либо глюк пропал)
Расскажите потом о результатах. Главное — создавайте новое приложение, выбрав тип «сайт».
сделал бы кто-нибудь плагин к wordpress для авторизации/возможности оставления комментариев под id вконтакте. полезная вещь была бы тоже, я думаю.
Если добрый системный администратор закроет в корпоративной сети доступ к Контакту, то офисные работники не смогут получить доступ к сервисам Вашего сайта… ))) Так что у этой медали далеко не одна сторона…
Могу ошибаться, но что стоит связываться с ВК только в момент регистрации? Т.е. использовать систему только для упрощения регистрации.
Да, документация Вконтакте оставляет желать…… документации. Что же касается Facebook Connect — то у этих ребят, к счастью, документация на высоте — сложно остаться в неведении. Но статейка на хабре будет не лишней, опыт никогда не бывает лишним.
UFO just landed and posted this here
Как раз недавно бранился на «доки» ихние. Благодарю за разъяснения. =)

Подобное описание FB Connect тоже не помешает, ибо в рунете практически ничего толкового на эту тему нет.
Ещё стоит упомянуть про особенность параметра nameTransportPath. Пару часов убил на то, чтобы определить почему авторизация не работает и какие значения он кушает, а какие нет.
Авторизация работает, только если в нем указан relative path!
Т.е ни «xd_receiver.htm», ни «httр://domain.com/vk/xd_receiver.htm» не прокатывает. Только "/vk/xd_receiver.htm".
В php лечится миксом из функций parse_url() и pathinfo() в случае, если домен-каталог веб-приложения задаётся через конфиги.
Огромное спасибо за пример.
А Open API можно добавить к текущему рабочему приложению или надо создавать новое? Я бы не спрашивал, но что-то при тестовых попытках это сделать всё работает через раз.
Полностью согласен с автором! Сам с этим столкнулся!
Прицепил регистрацию через Open API на сайт. Скрипты асинхронные. В опере через раз JS выбивает такую ошибку

i10.fastpic.ru/big/2010/0926/8e/c4e71ec2f725c...

т.е. не может обратиться к какой-то защищенной переменной «closed».

То сразу выбивает и не входит. То пару раз нормально, на третий раз ошибка. Замечано только в Опере на разных компах. С чем это может быть связано?
Проблему не решил, но обошел JS-таймером.
Не известно, как скоро появится нормальная система авторизации для сайтов от Вконтакте?
Работал работал, да в последние недели чтото перестал работать скрипт этот(
По этому алгоритму хакер может авторизоваться на Вашем сайте под любым пользователем просто зная его ID в контакте (публичен) и подделав данные в запросе авторизации на Ваш сервер.
Sign up to leave a comment.

Articles