1

Meetup APIの Google スプレッドシートにOAuth 2.0 ライブラリを使用しています

Code.gs

function getMeetupService() {  
  return OAuth2.createService('meetup')

      // Set the endpoint URLs, which are the same for all Google services.
      .setAuthorizationBaseUrl('https://secure.meetup.com/oauth2/authorize')
      .setTokenUrl('https://secure.meetup.com/oauth2/access')

      // Set the client ID and secret, from the Google Developers Console.
      .setClientId('.....')
      .setClientSecret('......')

      // Set the name of the callback function in the script referenced
      // above that should be invoked to complete the OAuth flow.
      .setCallbackFunction('authCallback')

      // Set the property store where authorized tokens should be persisted.
      .setPropertyStore(PropertiesService.getUserProperties())

      .setTokenFormat(OAuth2.TOKEN_FORMAT.FORM_URL_ENCODED);

}
_eventId = null;
function startService(eventId) {
  var meetupService = getMeetupService();
  if (!meetupService.hasAccess()) {
    var authorizationUrl = meetupService.getAuthorizationUrl();
    return authorizationUrl;

  } else {
   //Yet to decide
  }
  return 123;
}

function authCallback(request) {
  var meetupService = getMeetupService();
  var isAuthorized = meetupService.handleCallback(request);
  if (isAuthorized) {
    //getAllDetails(_eventId);
  } else {
    return HtmlService.createHtmlOutput('Denied. You can close this tab');
  }
}

Sidebar.html

    $(function() {
      checkService();
});
function checkService() {
    google.script.run
    .withSuccessHandler(function(url) {
        if(url) {
        $('body').append('<a href="'+url+'" target="_blank">Click here to Login into Meetup</a>');
           $('#run-get-details').attr("onclick", 'window.open("' + url + '")');
        } else {
           $('#run-get-details').attr("url", '');
        }
        $('#run-get-details').prop("disabled", false);
    })
    .withFailureHandler(failureHandler)
    .startService($("#eventId").val());
}
function authCallback(request) {
  alert(123);
}

リンクまですべてが機能しているようです。リンクをクリックすると、ミートアップの認証ウィンドウが開きます。しかし、ミートアップでアプリを承認すると、script.google.com にリダイレクトされます。

https://script.google.com/a/macros/ { domain }/d/{ PROJECT_ID }/usercallback?code={ code }&state=ADEpC8wvspQd-+VXyQ0mOhYNenFu9Ib08hK6xfJ2gNJwcTxrIB4nVfphDyhejUHEMdgD0OhtwdcEs46KdhUZMD-Ekwftj3bzXwdi-mKc8PLKd7SsAYYqE-ZVZD2tm1HmyxtKYJCkoeg7R1K5DIMedYp38BiJ4F2Hbtei34fEdveObQhMSMDt1f2ufrmDzGh5W+fxdXMEmrfeCINO23hC8yV0JRXVDkErL3t8pQih8DicQoY6k2uqHThK8BqfSioBkgPZ0SPvj3Krtpgj9R+XWGtPqRRAwPum4k8etMROvy2DLT1ENNJdrVw

しかし、その後、エラーがスローされます

状態トークンが無効であるか、有効期限が切れています。もう一度やり直してください。

誰かがこれで私を助けてください。

4

1 に答える 1

0

それで、これをもう少し調べてみると、問題が見つかりました。Meetup サーバーが状態トークンを変更しています。getAuthorizationUrl() からトークンをコピーし、不正なコールバックの URL の状態パラメーターに貼り付けると、Auth フローは正常に続行されます。

Apps Script で作成した State Token

ADEpC8zI8-E38GrIi2sB5Pf1xK2Hn-6XQ-SJLa0gmxos6z-hbvedTJ2UvXzSJxXbE_NfJlpHkOsjN4DLJ0sOGsYIZpTBc3OpAMWuoj-8UjUuKcTs1htZknyzv0QX9pPe-McxB_MC1fbGBjvrwEGP5_58tQdfRf3K70LURbe0cZ2qx_YK5xxN2qE

返された状態トークン

ADEpC8zI8-E38GrIi2sB5Pf1xK2Hn-6XQ-SJLa0gmxos6z-hbvedTJ2UvXzSJxXbE+NfJlpHkOsjN4DLJ0sOGsYIZpTBc3OpAMWuoj-8UjUuKcTs1htZknyzv0QX9pPe-McxB+MC1fbGBjvrwEGP5+58tQdfRf3K70LURbe0cZ2qx+YK5xxN2qE
于 2015-05-27T14:40:16.017 に答える