Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Uber身份验证失败”;HTTP状态401:未经授权,响应:{“错误”:“无效客户端”};_Ios_Iphone_Swift_Authentication_Uber Api - Fatal编程技术网

Ios Uber身份验证失败”;HTTP状态401:未经授权,响应:{“错误”:“无效客户端”};

Ios Uber身份验证失败”;HTTP状态401:未经授权,响应:{“错误”:“无效客户端”};,ios,iphone,swift,authentication,uber-api,Ios,Iphone,Swift,Authentication,Uber Api,我正在使用图书馆进行优步认证 我是这样做的 func doOAuthUber(){ let oauthswift = OAuth2Swift( consumerKey: "fXfXXXXXXXUo9vtKzobXXXXXUDO", consumerSecret: "e5XXXXXXXq2w63qz9szEx7uXXXXXXo03W", authorizeUrl: "https://login.uber.com/oauth/authorize", ac

我正在使用图书馆进行优步认证

我是这样做的

func doOAuthUber(){

let oauthswift = OAuth2Swift(
    consumerKey:    "fXfXXXXXXXUo9vtKzobXXXXXUDO",
    consumerSecret: "e5XXXXXXXq2w63qz9szEx7uXXXXXXo03W",
    authorizeUrl:   "https://login.uber.com/oauth/authorize",
    accessTokenUrl: "https://login.uber.com/oauth/token",
    responseType:   "code"
)

var originalString = "jamesappv2://oauth/callback"
var encodedCallBackUrl = originalString.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())

println("encodedCallBackUrl: \(encodedCallBackUrl)")


let state: String = ""
oauthswift.authorizeWithCallbackURL( NSURL(string: encodedCallBackUrl!)!, scope: "request%20history", state: state, success: {
    credential, response in

    println(credential.oauth_token)
    self.personalDriverLoader.stopAnimating()



    }, failure: {(error:NSError!) -> Void in

        self.personalDriverLoader.stopAnimating()
        println(error.localizedDescription)
})

}
但是得到这样的回应 HTTP状态401:未授权,响应:{“错误”:“无效的\u客户端”}

我已经三次检查了我的客户id(consumerKey)和secret(ConsumerCret)是否正确。 我在这里做错了什么

更新:1


这是有线的,我把responseType:“code”改为responseType:“token”,然后我得到了访问令牌。但我现在有另一个问题

现在当我试着打电话给

使用下面的代码

@IBAction func btnRequestUberdidClicked(sender: AnyObject) {

    self.callRequestAPI("https://sandbox-api.uber.com/v1/requests")

}

func callRequestAPI(url:String){

    var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    var session = NSURLSession(configuration: configuration)

    let params:[String: AnyObject] = [
                "product_id" : selectedUberProductId,
                "start_latitude" : start_lat,
                "start_longitude" : start_lng,
                "end_latitude" : end_lat,
                "end_longitude" : end_lng]



    appDelegate.oauthswift.client.post(url, parameters: params,
    success: { data, response in

    let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)


         println("Success")

                    println(data)

                    println(response)


        }, failure: {(error:NSError!) -> Void in

                         println("Error")

                    println(error)
    })


}
我得到了这样的回应

Error Domain=NSURLErrorDomain Code=401 "HTTP Status 401: Unauthorized, Response: {"message":"Invalid OAuth 2.0 credentials provided.","code":"unauthorized"}" UserInfo=0x1c563220 {NSLocalizedDescription=HTTP Status 401: Unauthorized, Response: {"message":"Invalid OAuth 2.0 credentials provided.","code":"unauthorized"}, Response-Headers=<CFBasicHash 0x1c578c40 [0x35305710]>{type = immutable dict, count = 7,
entries =>
    1 : x-xss-protection = <CFString 0x1ae2fc60 [0x35305710]>{contents = "1; mode=block"}
    4 : Server = <CFString 0x1acc24c0 [0x35305710]>{contents = "nginx"}
    5 : Content-Type = <CFString 0x1c4d0020 [0x35305710]>{contents = "application/json"}
    6 : Content-Length = <CFString 0x1c4b70b0 [0x35305710]>{contents = "75"}
    8 : Date = <CFString 0x1c4ed4b0 [0x35305710]>{contents = "Wed, 06 May 2015 12:46:51 GMT"}
    10 : Strict-Transport-Security = <CFString 0x1c225cb0 [0x35305710]>{contents = "max-age=31536000; includeSubDomains; preload"}
    11 : x-uber-app = <CFString 0x1c49a6b0 [0x35305710]>{contents = "uberex-sandbox"}
}
}
Error Domain=NSURLErrorDomain code=401“HTTP状态401:未经授权,响应:{“消息”:“提供了无效的OAuth 2.0凭据”。,“代码”:“未经授权”}UserInfo=0x1c563220{NSLocalizedDescription=HTTP状态401:未经授权,响应:{“消息”:“提供了无效的OAuth 2.0凭据”。,“代码”:“未经授权”},响应头={type=immutable dict,count=7,
条目=>
1:x-xss-protection={contents=“1;mode=block”}
4:Server={contents=“nginx”}
5:Content Type={contents=“application/json”}
6:内容长度={contents=“75”}
8:Date={contents=“Wed,2015年5月6日12:46:51 GMT”}
10:严格的传输安全性={contents=“max age=31536000;includeSubDomains;preload”}
11:x-uber-app={contents=“uberex沙盒”}
}
}

您必须在可能的情况下修改库,并能够打印从Uber返回的身份验证码。我在使用objective C进行Uber身份验证时遇到了类似的问题,然后我从日志中意识到Uber正在向授权码添加
#
。因此,当使用此代码获取访问令牌时,它将uld失败,出现
(401)未经授权的错误
,简单地说验证码无效,实际上是无效的

见下图

因此,最终我不得不从身份验证代码中删除
#
,然后再使用它来获取访问令牌

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *params1 = @{@"client_secret":UBER_CLIENT_SECRET,
                          @"client_id":UBER_CLIENT_ID,
                          @"grant_type":@"authorization_code",
                          @"redirect_uri":UBER_REDIRECT_URL,
                          @"code":[app.uberAuthCodeStr stringByReplacingOccurrencesOfString:@"#_" withString:@""]};
                    //******* THE FIX IS HERE ON THIS LINE ^^^

[manager POST:@"https://login.uber.com/oauth/v2/token" parameters:params1 success:^(AFHTTPRequestOperation *operation, id responseObject){
    NSLog(@"JSON: %@", responseObject);
    //
    app.uberBearerAccess_token = [responseObject valueForKey:@"access_token"];
    app.uberBearerRefresh_token = [responseObject valueForKey:@"refresh_token"];
    NSLog(@"Bearer AccessToken = %@ ",app.uberBearerAccess_token);
    // Save access token to user defaults for later use.
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    NSNumber *seconds = [responseObject objectForKey:@"expires_in"];
    NSDate *expiryDate = [[NSDate date] dateByAddingTimeInterval:seconds.intValue];
    [defaults setObject:expiryDate forKey:KEY_UBER_TOKEN_EXPIRE_DATE];
    [defaults setObject:app.uberBearerAccess_token forKey: KEY_UBER_TOKEN];
    [defaults setObject:app.uberBearerRefresh_token forKey: KEY_UBER_REFRESH_TOKEN];
     [defaults setObject:app.uberAuthCodeStr forKey: KEY_UBER_AUTH_CODE];
    [defaults synchronize];
    loginView.hidden = YES;
    [self goUberChat];
    //
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@':%@", error,params1);
    [ProgressHUD dismiss];
}];

希望这对您或任何有类似问题的人有所帮助。

请尝试使用此调用Uber Api

 NSString *string=[NSString stringWithFormat:@"https://api.uber.com/v1/products"];
    NSURL *url=[NSURL URLWithString:string];
    AFHTTPSessionManager *manager=[[AFHTTPSessionManager alloc]initWithBaseURL:url];
    NSDictionary *parameters = @{@"server_token":@"Your token",@"latitude":@"latitude",@"longitude":@"longitude",
    [manager GET: parameters:parameters progress:nil success:^(NSURLSessionTask *task,id responseObject){
    } failure:^(NSURLSessionTask *operation , NSError *error)
}];

Uber API需要OAuth2,但您使用的是OAuth1的lib格式。检查。查看,身份验证分三步完成,而不是一步。:@EricD。感谢您的回复。如何使用此库使用OAuth2。让我知道这有什么问题。您可以看到我使用了OAuth2Swift。您使用的是正确的
OAuth2Swift
对象,但在其中您使用的是e使用了错误的声明格式。请看OAuthSwift页面上的最后一个示例,其中不应该有任何
accessTokenUrl
。一旦得到此响应,请执行重定向,然后最终获得令牌。:)这是有线的,我将responseType:“code”更改为responseType:“token”,并且成功(o0).拿到我的通行证了。但我还有一个问题now@EricD.请参阅我的更新虽然此代码可能会回答此问题,但提供有关为什么和/或如何回答此问题的其他上下文将显著提高其长期价值。请在您的回答中添加一些解释。