使用AFOAuth2Manager进行身份验证

时间:2015-08-08 06:26:58

标签: ios objective-c afnetworking-2 afoauth2client

我正在使用dribbble客户端,但我无法使用AFOAuth2Manager进行身份验证。我目前正在使用NXOAuth2Client,但我刚遇到AFOAuth2Manager,所以我想试一试。

使用NXOAuthClient,从服务器获取令牌没有问题。但是,当谈到AFOAuth2Manager时,它总是返回错误。

这是我以前用NXOAuth2Client初始化的东西:

    [[NXOAuth2AccountStore sharedStore] setClientID:kDRBClientID
                                             secret:kDRBClientSecret
                                              scope:[NSSet setWithObjects:@"public", @"write", @"comment", @"upload", nil]
                                   authorizationURL:[NSURL URLWithString:kDRBAuthorizationURL]
                                           tokenURL:[NSURL URLWithString:kDRBTokenURL]
                                        redirectURL:[NSURL URLWithString:kDRBRedirectURL]
                                      keyChainGroup:kDRBAccountType
                                     forAccountType:kDRBAccountType];

使用相同的常量我试图用这样的AFOAuth2Manager初始化:

    NSURL *baseURL = [NSURL URLWithString:kDRBBaseUrl];
    AFOAuth2Manager *OAuth2Manager =
    [[AFOAuth2Manager alloc] initWithBaseURL:baseURL
                                    clientID:kDRBClientID
                                      secret:kDRBClientSecret];
    OAuth2Manager.useHTTPBasicAuthentication = NO;

    NSDictionary *dictionary = @{@"scope" : @"public write",
                                 @"redirect_uri" : kDRBRedirectURL};
     [OAuth2Manager authenticateUsingOAuthWithURLString:@"/oauth/authorize"
                                            parameters:dictionary
                                               success:^(AFOAuthCredential *credential) {
                                                   NSLog(@"Token: %@", credential.accessToken);
                                               }
                                               failure:^(NSError *error) {
                                                   NSLog(@"Error: %@", error);
                                               }];

用于运球的第一个直接用户登录页面(这是/ oauth / authorize页面)的流程,在用户输入用户名和密码后,它会将用户重定向到给定的redirectURL。

我现在的问题是我甚至无法登录登录页面。有人能否解释我做错了什么? (我也尝试过AFOAuth2Manager中的不同验证方法,但它们都不起作用。)

我对OAuth2很新,所以请耐心等待。

更新

这里是错误日志:

Error: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: client error (422)" UserInfo=0x7fb02ad2de00 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7fb02ad6e200> { URL: https://dribbble.com/oauth/authorize } { status code: 422, headers {
    Connection = close;
    "Content-Length" = 47;
    "Content-Type" = "application/json; charset=utf-8";
    Date = "Sat, 08 Aug 2015 23:52:20 GMT";
    Server = "nginx/1.4.6 (Ubuntu)";
    Status = "422 Unprocessable Entity";
    "X-Request-Id" = "8489a5f0-206a-48ff-b6e7-81664fc6b6f5";
    "X-Runtime" = "0.006667";
} }

使用NXOAuth2Client,它将使用我的参数为登录页面准备一个网址:

https://dribbble.com/oauth/authorize?client_id=my_client_id&scope=write%20comment%20upload%20public&redirect_uri=my_redirect_uri&response_type=code

但是我注意到,对于AFOAuth2,它会在https://dribbble.com/oauth/authorize处抛出错误。它没有将我的参数附加到请求网址上吗?

1 个答案:

答案 0 :(得分:1)

在发出请求之前添加以下行

OAuth2Manager.responseSerializer = [AFJSONResponseSerializer serializer];

而且,422 Unprocessable Entity - 服务器无法处理包含的指令。该请求格式正确,但由于语义错误而无法遵循。

例如,如果XML请求主体包含格式正确(即语法正确)但语义错误的XML指令,则可能会出现此错误情况。