Получение делегата для обратного вызова при успешном входе в систему через REST API через GTMOAuth - PullRequest
0 голосов
/ 23 февраля 2012

Я использовал GTMOAuth для успешного входа в Dropbox, но мне кажется, что я не могу получить делегата для обратного вызова после возвращения ответа У меня есть этот код для входа в систему ..

NSURL *requestURL = [NSURL URLWithString:@"https://api.dropbox.com/1/oauth/request_token"];
NSURL *accessURL = [NSURL URLWithString:@"https://api.dropbox.com/1/oauth/access_token"];
NSURL *authorizeURL = [NSURL URLWithString:@"https://www.dropbox.com/1/oauth/authorize"];
NSString *scope = nil;

GTMOAuthAuthentication *auth = [self authForTwitter];
if (auth == nil) {
// perhaps display something friendlier in the UI?
 NSAssert(NO, @"A valid consumer key and consumer secret are required for signing in to Twitter");
}

// set the callback URL to which the site should redirect, and for which
// the OAuth controller should look to determine when sign-in has
// finished or been canceled
//
// This URL does not need to be for an actual web page; it will not be
// loaded
[auth setCallback:@"https://www.dropbox.com"];

NSString *keychainItemName = nil;
if ([self shouldSaveInKeychain]) {
  keychainItemName = kTwitterKeychainItemName;
}

// Display the autentication view.
GTMOAuthViewControllerTouch *viewController;
viewController = [[[GTMOAuthViewControllerTouch alloc] initWithScope:scope
             language:nil
      requestTokenURL:requestURL
     authorizeTokenURL:authorizeURL
       accessTokenURL:accessURL
       authentication:auth
       appServiceName:keychainItemName
             delegate:self
     finishedSelector:@selector(viewController:finishedWithAuth:error:)] autorelease];

// We can set a URL for deleting the cookies after sign-in so the next time
// the user signs in, the browser does not assume the user is already signed
// in
[viewController setBrowserCookiesURL:[NSURL URLWithString:@"http://api.dropbox.com/"]];

// You can set the title of the navigationItem of the controller here, if you want.

[[self navigationController] pushViewController:viewController animated:YES];

Я пытался редактировать библиотеку, но безуспешно.

1 Ответ

1 голос
/ 13 марта 2012

наткнулся на ту же проблему.После некоторой отладки кажется, что проблема заключается в том, что URL-адрес обратного вызова не включен в шаг «6.2.1. Потребитель направляет пользователя к поставщику услуг» (http://oauth.net/core/1.0a/#auth_step2). В соответствии со спецификациями OAuth не должен, но Dropboxтребует, чтобы он выполнял перенаправление.

Итак, для проверки я изменил GTMOAuthAuthentication.m следующим образом:

+ (NSArray *)tokenAuthorizeKeys {
  // keys for opening the authorize page, http://oauth.net/core/1.0a/#auth_step2
  NSArray *keys = [NSArray arrayWithObjects:
                   kOAuthTokenKey,
                   // extensions
                   kOAuthDomainKey,
                   kOAuthHostedDomainKey,
                   kOAuthLanguageKey,
                   kOAuthMobileKey,
                   kOAuthScopeKey,
                   kOAuthCallbackKey, // !pi! 20120313 dropbox testing
                   nil];
  return keys;
}

, то есть добавил URL-адрес обратного вызова к этому шагу. Теперь GTMOAuth работает с Dropboxдля меня.

Должно быть лучшее решение для этого, но я просто тестировал GTMOAuth / RESTKit, и этого мне было достаточно.

...