【问题标题】:How to make a API request with access token?如何使用访问令牌发出 API 请求?
【发布时间】:2019-02-19 23:51:27
【问题描述】:

我想在我登录应用程序并接收访问令牌后对我进行的每个 API 调用使用访问令牌。我尝试了很多东西,但没有任何结果。当我在邮递员上测试它时,我得到了正确的响应。我不知道我做错了什么。我正在使用 AFNetworking(AFHTTPSessionManager 是 NetworkIntractor 的基类),这是我的网络层代码:

+(NetworkIntractor *)sharedManager{
static NetworkIntractor *manager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
    config.URLCache = nil;
    config.timeoutIntervalForRequest = 15.0f;
    config.timeoutIntervalForResource =20.0f;
    if ([USERDEFAULT boolForKey:LOGGEDIN] == YES) {
        [manager.requestSerializer setValue:[[NSUserDefaults standardUserDefaults]valueForKey:AccessToken] forHTTPHeaderField:@"Authorization"];
    }
    manager = [[NetworkIntractor alloc]initWithBaseURL:[NSURL URLWithString:BASEURL] sessionConfiguration:config];
    [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

    });
return manager;}


void call_getNetworkingAPI(NSURL *url, SuccessBlock successBlock, FailureBlock failureBlock){

NSURLSessionDataTask *task = [[NetworkIntractor sharedManager].session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    if (error == nil) {

        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        if (dict != nil) {
            successBlock(dict,response);
        }
    }else
    {
        failureBlock(error,response);
    }
}];
[task resume];

}

感谢任何帮助。

【问题讨论】:

  • 您存储在 NSUSerDefaults 中的值是否只是原始令牌?如果是这样,您需要在 Authorization 标头中添加一个令牌类型(例如,在令牌之前添加“Bearer”)。
  • @DavidS.我试过你说的,我保存访问令牌如下:accessTokenDict = @{@"Bearer":userDetails[@"accessToken"]};但它仍然无法正常工作。
  • @DavidS.你能推荐点别的吗?
  • Bearer和token之间应该有一个空格。
  • @DavidS。是的,那里也有。

标签: ios objective-c api access-token


【解决方案1】:

我只是缺少标题中的缓存控制键,就是这样。

NSDictionary *headers = @{ @"Authorization": [NSString stringWithFormat:@"Bearer %@", [[NSUserDefaults standardUserDefaults] valueForKey:AccessToken]],
                           @"Cache-Control": @"no-cache"
                           };
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@", BASEURL, urlStr]]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                if (error) {
                                                    DLog(@"%@", error);
                                                } else {
                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                                    DLog(@"%@", httpResponse);

                                                    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

                                                    if (dict != nil) {
                                                        successBlock(dict,httpResponse);
                                                    }
                                                    else
                                                    {
                                                    failureBlock(error,httpResponse);
                                                    }

                                                }
                                            }];

[dataTask resume];

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 1970-01-01
    • 2018-01-19
    • 2012-03-23
    • 2013-02-17
    • 2021-11-27
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多