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

SDK SoundCloud v3.1.2

Я зарегистрировал свое приложение примерно 1 год назад.

Сегодня я обнаружил, что мой вход в SoundCloud (SC) перестал работать.

Когда я нажимаю кнопку, появляется всплывающее окно SC с сообщением «Разрешить «domain.com» доступ к вашей учетной записи SoundCloud?». Я нажимаю connect и получаю всплывающее окно обратного вызова с сообщением «< em>Это всплывающее окно должно автоматически закрыться через несколько секунд". Всплывающее окно обратного вызова никогда не закрывается. И в консоли разработчика (для всплывающего окна обратного вызова) я вижу следующие ошибки:

Chrome 55.0.2883,87 м (64-разрядная версия) VM2980 callback.html?code=3717208…&state=SoundCloud_Dialog_508d9:7 Uncaught DOMException: Blocked a frame with origin "http://domain.com" from accessing a cross-origin frame. at onload (http://domain.com/callback.html?code=3717208cc602aba6cc0195157ecd2b6b&state…8d9#access_token=1-166020-17988851-e8f6b064d7ccd4&scope=non-expiring:7:105) onload @ VM2980 callback.html?code=3717208…&state=SoundCloud_Dialog_508d9:7

Firefox 50.1.0 Error: Permission denied to access property "SC" callback.html:1:1 Узнать больше

Мой callback.html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Connect with SoundCloud</title>
  </head>
  <body onload="window.setTimeout(window.opener.SC.connectCallback, 1);">
    <p>
      This popup should automatically close in a few seconds
    </p>
  </body>
</html>

Функция JavaScript (в компонентном контроллере AngularJS 1.6), которая запускается кнопкой на моей странице:

... 
      this.connect_sc = function () {
        debugger;
      // initiate auth popup
        SC.connect().then(function () {
          debugger;
          return SC.get('/me');
        }).then(function (me) {
          debugger;
          userPerma = me.permalink;
          setScUi(me.username, me.avatar_url);
          getPlaylists();
        });
      };
...

Я попытался отладить его, поставив несколько точек останова. Здесь я не выполняю обещание SC, оно прерывается только на первом debugger; после того, как я нажимаю на кнопку.

Почему так и как это исправить?


person srgbnd    schedule 28.12.2016    source источник
comment
У вас есть страница, домен и URI обратного вызова, зарегистрированные в SoundCloud?   -  person Tyler Roper    schedule 29.12.2016
comment
Да, конечно. И URI перенаправления правильный, я проверил. Кроме того, вход работал раньше. Конечно, возможно я его как-то сломал. Но я не понимаю, как. Я не выполняю обещание SC, здесь оно никогда не нарушается: SC.connect().then(function () { debugger; return SC.get('/me');})   -  person srgbnd    schedule 29.12.2016
comment
@Santi Я только что узнал, что у SC есть новый способ регистрации приложений. Я зарегистрировался примерно 1 год назад. И я построил последний SDK. Может быть, там что-то изменилось.   -  person srgbnd    schedule 29.12.2016
comment
См. этот ответ для возможного обходного пути, если вы контролируете содержимое как фрейма, так и родительского окна: stackoverflow.com/a/25098153/ 1288121   -  person mopsyd    schedule 29.12.2016
comment
В противном случае вам, вероятно, придется использовать новый процесс регистрации приложений, который предлагает SoundCloud.   -  person mopsyd    schedule 29.12.2016
comment
@mopsyd Думаю, реализовать этот обходной путь невозможно, так как я не владелец SoundCloud.   -  person srgbnd    schedule 29.12.2016


Ответы (1)


Та же проблема для меня.

Я исправил это с помощью перенаправления. Когда я был на своем веб-сайте без «www», это не сработало, потому что обратный вызов зарегистрирован с «www».

Я добавил перенаправление, чтобы мой сайт был только с «www», и теперь он работает хорошо!

Надеюсь, это поможет.

person Basileus    schedule 26.01.2017