Swift Alamofire从刷新令牌请求错误中获取令牌

我对使用Alamofire相当陌生,而且我正在用这个要求将我的头撞在墙上。 我正在使用GIDSignIn,并成功获取用户的令牌和刷新令牌,范围为[“ https://www.googleapis.com/auth/youtube.readonly ”]。

我试图完成这个请求,如网站上的示例所示。 该网站说,忽略使用iOS的client_secret ,我这样做。

 POST /oauth2/v4/token HTTP/1.1 Host: www.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=<your_client_id>& client_secret=<your_client_secret>& refresh_token=<refresh_token>& grant_type=refresh_token 

以下是我如何用Alamofire实现它。 我的client_id是来自GoogleService-Info.Plist中CLIENT_ID键的值,这是一个以.apps.googleusercontent.com结尾的string。 refresh_token似乎也有我在网上看到的其他例子的正确格式。

 let endpoint = "https://www.googleapis.com/oauth2/v4/token" let parameters = [ "client_id" : client_id, "refresh_token" : refresh_token, "grant_type" : "refresh_token" ] Alamofire.request(endpoint, method: .post, parameters: parameters, encoding: JSONEncoding.default) .responseJSON { (data) in print("data: \(data)") let json = JSON(data.result) } 

数据响应是

 data: SUCCESS: { error = "unsupported_grant_type"; "error_description" = "Invalid grant_type: "; } 

不是非常成功。 我是否需要以不同的方式configuration我的请求,或获得相应的访问权限以获取令牌? 非常感谢!

我已经厌倦了这样的代码,你也需要检查一下编码typesURLEncoding.httpBody希望它可以帮助

  let headers = [ "Content-Type": "application/x-www-form-urlencoded" ] Alamofire.request("https://accounts.google.com/o/oauth2/revoke?token={\(token)}", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers).responseJSON { (response:DataResponse<Any>) in 

@BikeshThakur帮我弄明白了! URLEncoding.httpBody做了诡计! 我也不需要任何标题。

 Alamofire.request(endpoint, method: .post, parameters: parameters, encoding: URLEncoding.httpBody) 

我纯粹猜测这个。 但是,这是我承担这一点。下面的代码是必要的,但我不知道这个请求是否是一个get或post,所以我写了他们两个。 将令牌存储在string标记中,如下所示。

 let headers = [ "Content-Type": "application/x-www-form-urlencoded" ] let token:String = "..." 

这是为了获取请求。

 Alamofire.request("https://accounts.google.com/o/oauth2/revoke?token={\(token)}",headers: headers).responseJSON{response in } 

以下是发帖要求。

 Alamofire.request("https://accounts.google.com/o/oauth2/revoke?token={\(token)}",method: .post,headers: headers).requestJSON{response in }