我是一名刚接触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
})
}
答案 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