2016-12-19 5 views
0

私は(https://untappd.com/api/docs#authentication)Untappd APIで動作するのOAuth2得るためにしばらくの間しようとしてきたし、いくつかの異なるのOAuth2フレームワークと行き止まりに実行されています。スウィフトのOAuth2 p2の

私はP2 OAuthを試しています。私は認証プロセスを開始することができるようだが、ユーザーがサインインすると、コードが戻ってきて、そのコードをトークンのuntappdに送り返して問題に陥る。私は、P2のOAuthから例のオフに行くされてきた:私は、コードを取り戻すように見えるが、最終的な交換が失敗したログで

class ViewController: UIViewController { 

fileprivate var alamofireManager: SessionManager? 

var loader: OAuth2DataLoader? 

var oauth2 = OAuth2CodeGrantNoTokenType(settings: [ 
    "client_id": "A0******************", 
    "client_secret": "BA******************", 
    "authorize_uri": "https://untappd.com/oauth/authenticate", 
    "token_uri": "https://untappd.com/oauth/authorize", 
    "redirect_uris": ["****://oauthcallback"], 
    "response_type": "code", 
    "secret_in_body": false, 
    "keychain": true, 
] as OAuth2JSON) 

@IBOutlet var imageView: UIImageView? 
@IBOutlet var signInEmbeddedButton: UIButton? 
@IBOutlet var signInSafariButton: UIButton? 
@IBOutlet var signInAutoButton: UIButton? 
@IBOutlet var forgetButton: UIButton? 


@IBAction func signInEmbedded(_ sender: UIButton?) { 
    if oauth2.isAuthorizing { 
     oauth2.abortAuthorization() 
     return 
    } 

    sender?.setTitle("Authorizing...", for: UIControlState.normal) 

    oauth2.authConfig.authorizeEmbedded = true 
    oauth2.authConfig.authorizeContext = self 
    oauth2.verbose = true 

    oauth2.authorize() { authParameters, error in 
     if let params = authParameters { 
      print("Authorized! Access token is in `oauth2.accessToken`") 
      print("Authorized! Additional parameters: \(params)") 
     } 
     else { 
      print("Authorization was cancelled or went wrong: \(error)") // error will not be nil 
     } 
    } 

} 

[デバッグ]のOAuth2:交換コード2010D2を

をリダイレクトhttps://untappd.com/oauth/authorize でアクセストークンのため*********** [デバッグ]のOAuth2:[偽] [偽]アクセスと引き換えコードを行なったし、リフレッシュ認定 トークン!アクセストークンはoauth2.accessToken です。追加のパラメータ:["meta":{ "error_detail" = "client_id、redirect_url、client_secret、またはcodeパラメータのいずれかが見つかりません。 "error_type" = "param_error"; "http_code" = 500; }、 "応答":< __NSArray0 0x174005900>( ) ]

私は間違った場所で探していない限り、のOAuth2とスウィフト3のために多くの助けがあるように思えません。何か案は?

答えて

0

これを実証しました。他の誰かがこれにぶつかる場合。トークンのコード交換中に渡されなかったclient_secretに追加するOAuth2CodeGrantクラスを修正しなければならなかっただけです。

open func accessTokenRequest(with code: String, params: OAuth2StringDict? = nil) throws -> OAuth2AuthRequest { 
    guard let clientId = clientConfig.clientId, !clientId.isEmpty else { 
     throw OAuth2Error.noClientId 
    } 
    guard let redirect = context.redirectURL else { 
     throw OAuth2Error.noRedirectURL 
    } 

    guard let clientSecret = clientConfig.clientSecret else { 
     throw OAuth2Error.noClientSecret 
    } 

    let req = OAuth2AuthRequest(url: (clientConfig.tokenURL ?? clientConfig.authorizeURL), method: .GET) 

    req.params["code"] = code 
    req.params["grant_type"] = type(of: self).grantType 
    req.params["redirect_uri"] = redirect 
    req.params["client_id"] = clientId 
    req.params["client_secret"] = clientSecret 

    return req 
}