【发布时间】:2014-02-16 14:19:18
【问题描述】:
我有一个关于使用令牌的 json 身份验证的问题。我有一个带有数据库的服务器。当我想 POST 或 PUT 到数据库时,我需要一个带有请求的令牌,这对于每个用户都是唯一的。我已经用休息客户端尝试过这个,它工作正常。我将附上其余客户端的打印屏幕。但是当我想从应用程序中执行此操作时,我得到响应“访问被拒绝”。我究竟做错了什么?
这是我的 Objective-C 代码:
NSString *jsonRequest = [NSString stringWithFormat:@"{\"name\":\"%@\",\"skills\":\"%@\",\"description\":\"%@\",\"expectation\":\"%@\",\"mail\":\"%@\"}",profileName.text,profileSkills.text,profileDescription.text,profileExpectations.text,profileMail.text];
NSString *testToken = @"6ecf0fe735487bcaab74c0fcd3ed57dc";
NSURL *url = [NSURL URLWithString:@"https://31.208.72.233:3000/persons/63"];
NSData *JSONBody = [jsonRequest dataUsingEncoding:NSUTF8StringEncoding];
NSString *headerValue = [NSString stringWithFormat:@"Authorization: Token %@" , testToken];
NSMutableURLRequest *loginRequest = [[NSMutableURLRequest alloc] initWithURL:url];
loginRequest.HTTPMethod = @"PUT";
loginRequest.HTTPBody = JSONBody;
[loginRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[loginRequest addValue:headerValue forHTTPHeaderField:@"Authorization"];
NSURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:loginRequest returningResponse:&response error:nil];
NSString *txt = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
【问题讨论】:
-
在标题中有键值对。
Authorization是键,后面的都是值。看起来您实际上可能发送的是Authorization: Authorization: Token 6ecf0fe735487bcaab74c0fcd3ed57dc。你能尝试从headerValue中删除Authorization吗 -
这对我有帮助,现在我得到了回复:2014-02-16 16:40:51.248 "AppName"[1743:3307] CFNetwork SSLHandshake failed (-9800) 2014-02-16 16 :40:51.265 "AppName"[1743:3307] CFNetwork SSLHandshake 失败 (-9800) 2014-02-16 16:40:51.290 "AppName"[1743:3307] CFNetwork SSLHandshake 失败 (-9800) 2014-02-16 16 :40:51.290 "AppName"[1743:3307] NSURLConnection/CFURLConnection HTTP 加载失败 (kCFStreamErrorDomainSSL, -9800)
-
你的客户是否给你完整的原始请求 - 你能发布这个
-
实际的 HTTP 请求,所以我们可以看到有什么区别 - 如果客户端工作但您的代码没有,则必须有区别
标签: objective-c json authentication token