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

时间:2017-07-08 19:07:39

标签: ios swift oauth-2.0 youtube-api alamofire

我对使用Alamofire非常陌生,而且我正在用这个要求撞到墙上。我正在使用GIDSignIn,并成功获得用户的令牌和刷新令牌,范围为[" https://www.googleapis.com/auth/youtube.readonly"]。

我试图完成此请求,如site上的示例所示。该网站表示要忽略使用client_secret for iOS,我这样做。

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结尾。 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: ";
}

不是非常成功。我是否需要以不同方式配置我的请求,或获得获取令牌的适当访问/权限?非常感谢你!

2 个答案:

答案 0 :(得分:3)

@BikeshThakur帮助我解决了问题! URLEncoding.httpBody做到了!我也不需要任何标题。

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

答案 1 :(得分:1)

我已经厌倦了这样的代码,你还需要检查某些时候的编码类型 URLEncoding.httpBody 希望它可以帮助

Public Sub RunMethod()
    Dim code As String
        code = "Public Function testMethod()" & vbNewLine & _
                vbTab & "MsgBox """ & Time & """" & vbNewLine & _
                "End Function"

    If Not checkProcName("testMethod") Then
        ThisWorkbook.VBProject.VBComponents("DynamicFunctions").CodeModule.AddFromString code
    End If

    Application.Run "testMethod"

End Sub