AFNetworking - Twitter OAuth重定向URL

时间:2014-11-18 01:57:46

标签: ios objective-c node.js afnetworking passport.js

我是一名刚接触iOS开发的网络开发人员,我正试图将客户端/服务器Twitter OAuth流程绑定到iPhone应用程序。

我想在node.js服务器上使用护照Twitter策略进行身份验证。因此,在Web客户端设置中,我向我在服务器上设置的Twitter授权URL发出请求,并且服务器通过重定向进行响应,该重定向将我带到提供访问令牌的Twitter登录页面。此重定向URL由护照Twitter策略自动处理。

如何使用AFNetworking在应用程序的上下文中创建相同的Web重定向效果。我知道如何进行基本的POST和GET请求,但AFNetworking是否可以通过打开safari并重定向到提供的链接来处理服务器响应?

我在下面提供的代码不会抛出任何错误,但我没有重定向...

iOS代码:

- (IBAction)twitterLogin:(id)sender {
NSLog(@"Twitter Login");

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:@"http://54.148.118.153/auth/twitterX/" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

}

Node.js服务器代码:

var TwitterStrategy = require('passport-twitter').Strategy;

// twitter authentication and login
app.get('/auth/twitterX', passport.authenticate('twitter'));

// handle callback after twitter has authenticated user
app.get('/auth/twitterX/callback',
    passport.authenticate('twitter',{
        successRedirect: '/',
        failureRedirect: '/'
    }
));

// used to serialize user
passport.serializeUser(function(user,done){
   done(null, user.twitter_id);
});

// used to deserialize the user
passport.deserializeUser(function(twitter_id,done){
   connection.query('SELECT * from User_Twitter where id = '+twitter_id, function(err,rows){
      done(err,rows[0]);
   });
});

// passport Twitter protocol
passport.use(new TwitterStrategy({
    consumerKey:'G17pGaKQUYPPsy5o5H7siZvWj',
    consumerSecret:'qiTVnzHsIhWDqlkPd4vF2Xao7L9wvAh08YGpwOpXb5CowesqIb',
    callbackURL:'http://54.148.118.153/auth/twitterX/callback'
},
function(token, tokenSecret, profile,done){
    //Make code asynchronous - MySQL query won't fire until we have all data back from twitter
    process.nextTick(function(){

       //Do stuff with Twitter data 


    })
}

1 个答案:

答案 0 :(得分:0)

让我向您介绍AFOAuth2Client,由维护AFNetworking的人员维护:https://github.com/AFNetworking/AFOAuth2Client

我将在此处粘贴他们的示例代码文档:

NSURL *url = [NSURL URLWithString:@"http://example.com/"];
AFOAuth2Client *oauthClient = [AFOAuth2Client clientWithBaseURL:url clientID:kClientID secret:kClientSecret];

[oauthClient authenticateUsingOAuthWithPath:@"/oauth/token"
                                   username:@"username"
                                   password:@"password"
                                      scope:@"email"
                                    success:^(AFOAuthCredential *credential) {
                                        NSLog(@"I have a token! %@", credential.accessToken);
                                        [AFOAuthCredential storeCredential:credential withIdentifier:oauthClient.serviceProviderIdentifier];
                                    }
                                    failure:^(NSError *error) {
                                        NSLog(@"Error: %@", error);
                                    }];

检查该成功块中的NSLog语句:一旦获得该令牌,就可以将该NSLog语句替换为您希望将令牌保留在客户端上的任何存储解决方案。

另外,如果你还没有检查过,我强烈建议你使用CocoaPods作为你的首选依赖管理器。这样,只需一行就可以引入像AFOAuth2Client这样的依赖:http://cocoapods.org