vk openapi likes.add

438
11 января 2017, 03:26

Использую библиотеку вк openapi.js. Все методы которые вызывал работали. Сейчас столкнулся с методами likes.add и likes.delete а они отвечают отказом доступа. Подскажите в что я делаю не так.

VK.Api.call('likes.add', {
    type: 'post',
    owner_id: -2158488,
    item_id: 651604,
    v:'5.60'
  }, function (r){
    console.log('r', r);
  });

В console

Object error: Object error_code: 15 error_msg: "Access denied: no access to call this method"

Битовая маска при авторизации 73758

Answer 1

Метод likes.add можно использовать только в standalone-приложениях. Это такие приложения, которые, простыми словами, имеют более расширенный доступ к системе пользователя, чем обычный веб-сайт. Например, мобильные клиенты, десктопные программы и даже расширения для браузеров (некоторых ограничений, например CORS, у них нет, а также они могут читать содержимое любой вкладки). Получить токен standalone-приложения, у которого не было бы ограничений на вызовы методов API, через веб-сайт нельзя. Вообще. Никак.

Дело в том, что получить токен без ограничений можно только в том случае, если в качестве параметра redirect_uri указан адрес https://oauth.vk.com/blank.html. Этот параметр отвечает за то, куда будет перенаправлен пользователь после авторизации в приложении. И после авторизации пользователя токен отобразится в адресной строке браузера примерно вот так:

https://oauth.vk.com/blank.html#access_token=533bacf01e11f55b536a565b57531ad114461ae8736d6506a3&expires_in=86400&user_id=8492&state=123456

К сожалению, не существует такой магии, которая бы позволила получить содержимое hash-строки другой вкладки. А потенциальные лазейки (например, iFrame) ВКонтакте закрыли. Именно поэтому самостоятельно дёрнуть этот токен вы и не сможете, даже если пользователь успешно авторизуется в приложении. Тем не менее, мобильные и десктопные приложения, а также браузерные расширения обладают достаточным функционалом, чтобы сделать это.

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

Но вы можете авторизовать пользователя и попросить его скопировать токен в форму на вашем сайте. А дальше уже вызывать необходимые вам методы через JSONP или с бэкэнда. Open API в таком случае не подойдет, т.к. он не умеет принимать кастомные токены. Только учтите, что после авторизации у пользователя черным по белому будет написано, чтобы он никуда не копировал токен. Но так лучше не делать. Не исключено, что это нарушает какие-нибудь правила ВКонтакте, за что они могут просто отключить ваше приложение, а также это как-никак плохо влияет на UX.

READ ALSO
Потеря контекста вызова

Потеря контекста вызова

Объясните, пожалуйста, почему после присвоения var f = obj1f теряется контекст вызова и выводится undefined?

372
Изменить параметр css c помощью js

Изменить параметр css c помощью js

Я делаю небольшой календарь событийЕсть формы для ввода события, его описания, ввода даты и времени начала и даты и времени конца

376
Порядок потока селекторов в css

Порядок потока селекторов в css

Каким образом здесь зависит порядок селекторов? Переход не работает если поставить класс перехода первым https://jsfiddlenet/7u5z943r/ Какая разница?...

375
не срабатывает break в js коде

не срабатывает break в js коде

Здравствуйтеесть код проверки существования юзера, который выполняется но, если юзер существует он должен выдать в консоль "юзер существует"...

428