2015-08-21 5 views
0

Я пытаюсь выполнить аутентификацию w OAuth2 и Eventbrite с помощью iOS/swift. Вот мой соответствующий код сниппет:Ошибка «Ошибка, что-то пошло не так» при аутентификации w OAuth2 и Eventbrite с использованием iOS/swift

let oauthswift = OAuth2Swift(
     consumerKey: Eventbrite["consumerKey"]!, 
     consumerSecret: Eventbrite["consumerSecret"]!, 
     authorizeUrl: "https://www.eventbrite.com/oauth/authorize", 
     accessTokenUrl: "https://www.eventbrite.com/oauth/token", 
     responseType: "code" 
    ) 
    oauthswift.authorizeWithCallbackURL(NSURL(string: "oauth2-swift://oauth-callback/eventbrite")!, scope: "", state: "", 
     success: { 
      credential, response, parameters in 
      self.showAlertView("Eventbrite", message: "oauth_token:\(credential.oauth_token)") 
     }, failure: {(error:NSError!) -> Void in 
      println(error.localizedDescription) 
    }) 

Однако, когда я иду на Eventbrite страницу OAuth после того как я принимаю, что я хочу, чтобы подключить это приложение с моей учетной записи, я вижу «К сожалению, что-то пошло не так» ошибка в Eventbrite. Ссылка: https://www.eventbrite.com/oauth/authorize?client_id= {MyClientId} & redirect_uri = oauth2-скор: // OAuth обратного вызова/Eventbrite & response_type = код

Я добавил «OAuth-быструю» схему URL для info.plist.

Вот мои Eventbrite Настройки приложения: URL Применение: http://mywebsite.com OAuth Перенаправление Uri: OAuth-скор: // OAuth обратного вызова/Eventbrite

Как я могу перенаправить пользователя на мое приложение, так что я могу извлечь токен доступа? Функция делегата/openURL приложения не вызывается, когда я пытаюсь выполнить аутентификацию w Eventbrite (она вызывается при попытке w Foursquare и Instagram). Кроме того, я попробовал OAuth2 с Foursquare и Instagram, и он отлично работает.

Я пропустил что-то конкретное для OAuth2 w eventbrite w.r.t настройки моего приложения, код и т. Д.? Благодаря

ответ

1

Пара вещей, чтобы быть осторожным при работе с OAuth в прошивкой:

  1. Если вы планируете распространять ваше приложение в App Store, убедитесь, что вы не используете Safari для проверки подлинности. Вы должны сделать это в своем приложении, а лучшее место - с помощью WebView.
  2. Никогда не храните свою тайну App/Consumer в приложении iOS.

Теперь, как реализовать аутентификацию OAuth через WebView?

  1. Если вы используете раскадровки, перетащите WebView в ViewController. Также создайте файл класса для ViewController и создайте IBOutlet для WebView.
  2. В функции viewDidAppear ViewController установлено, что WebView загружает ваш URL-адрес авторизации.

    authorisationURL = "https://www.eventbrite.com/oauth/authorize?client_id=YOUR_CLIENT_KEY&response_type=code&redirect_uri=REDIRECT_URI" 
    
    self.webView.loadRequest(NSURLRequest(URL: NSURL(string: authorisationURL)!)) 
    
  3. Добавить UIWebViewDelegate протокол к ViewController и добавить функцию webViewDidFinishLoad(webView: UIWebView). Эта функция будет вызываться всякий раз, когда WebView завершит загрузку страницы.
  4. Как только пользователь предоставляет доступ к вашему приложению, Eventbrite перенаправит вас на перенаправление uri, предоставленное кодом. например https://localhost?code=xxxx. Мы можем получить доступ к коду, прочитав этот URL.

    if (webView.request?.URL?.absoluteString!.rangeOfString("code=") != nil) { 
        let queryString = webView.request?.URL?.query 
        println(queryString)    
        let authenticationCode = queryString!.substringFromIndex(advance(codeContainer!.startIndex, 5)) 
        // we are advancing 5 characters in order to ignore "code=" 
    } 
    

Теперь, когда у вас есть свой код, его время, чтобы использовать свой бэкенд для получения маркера доступа. У вас есть доступ к веб-серверу? Если да, вам просто нужно передать код, полученный выше, на ваш сервер и инициировать запрос POST от вашего бэкэнд. Eventbrite ответит вам токеном доступа, который вы можете хранить в бэкэнд (рекомендуется) или на клиенте.

method: 'POST', 
    url: 'https://www.eventbrite.com/oauth/token', 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded', 
    }, 
    body: { 
     'client_id' : '*******', 
     'client_secret' : '********', 
     'grant_type' : 'authorization_code', 
     'code' : CODE_RECEIVED_FROM_ABOVE 
    } 

Если у вас нет доступа к веб-серверу, вы можете попробовать Parse.com.

 Смежные вопросы

  • Нет связанных вопросов^_^