我在我的iPhone应用程序中使用http://github.com/bengottlieb/Twitter-OAuth-iPhone/tree/master用于Twitter + Oauth。我正在尝试创建一个类似facebook连接的功能,可以登录并注销twitter。这个特殊的Twitter + Oauth实现不使用会话,所以我不确定这是如何工作的。
有没有人有这方面的经验,如果是这样我将如何退出?
答案 0 :(得分:6)
您必须在Cookie中清除Browser Bcz _engine商店用户名和密码的cookie。
这是Twitter中LogOut的正确代码。
-(IBAction) onLogOutClick:(id)sender
{
[_engine clearAccessToken];
[_engine clearsCookies];
[_engine setClearsCookies:YES];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"authData"];
[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"authName"];
NSLog(@"%@",[[NSUserDefaults standardUserDefaults]valueForKey:@"authName"]);
NSLog(@"%@",[[NSUserDefaults standardUserDefaults]valueForKey:@"authData"]);
[_engine release];
_engine=nil;
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
{
NSString* domainName = [cookie domain];
NSRange domainRange = [domainName rangeOfString:@"twitter"];
if(domainRange.length > 0)
{
[storage deleteCookie:cookie];
}
}
}
答案 1 :(得分:1)
我能够使用以下代码模拟注销:
- (IBAction)logoutOfTwitter:(id)sender {
[oauthEngine release];
oauthEngine = nil;
[[NSUserDefaults standardUserDefaults] setObject:@"" forKey: @"authData"];
}
答案 2 :(得分:1)
非常感谢@Justin Gallagher!
我一直在寻找答案,并且实际上在不久前看到了你的答案,但没想到那里有什么我还没试过。
我向它提出了所有建议,最终答案似乎是你和这里的一个组合:github_bengottlieb_Twitter-OAuth-iPhone_issues_41
我没有做过(你建议的)是:
oauthEngine = nil;
[[NSUserDefaults standardUserDefaults] setObject:@"" forKey: @"authData"];
或者就我而言:
_engine = nil;
这会导致twitter视图控制器再次弹出,但没有用户名&密码提示 - 因此只允许和拒绝按钮。
如果您希望它完全注销并因此在下次提示用户输入新凭据(无需重新启动应用程序),则需要设置:
_clearsCookies = YES;
在MGTwitterEngine课程中。
再次感谢!
答案 3 :(得分:1)
执行注销时,您需要处理几件事情,例如
否则会造成麻烦&当你试图重新登录时,即使应用程序也会崩溃它可能存储您的访问令牌。一个人无法使用新的用户名登录密码。这是强制性部分,当你注销时需要处理它。
- (IBAction)logoutOfTwitter:(id)sender
{
[_engine clearAccessToken];
[_engine clearsCookies];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"authData"];
[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"authName"];
NSLog(@"%@",[[NSUserDefaults standardUserDefaults]valueForKey:@"authName"]);
NSLog(@"%@",[[NSUserDefaults standardUserDefaults]valueForKey:@"authData"]);
[_engine release];
_engine=nil;
}
希望现在非常清楚。试试吧。
答案 4 :(得分:0)
这也有效:
[oauthEngine clearAccessToken];
答案 5 :(得分:0)
- (IBAction)logoutTwitter:(id)发件人 {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"authData"];
[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"authName"];
_engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self];
_engine.consumerKey = @"consumerKey";
_engine.consumerSecret = @"consumerSecret";
[_engine clearAccessToken];
//[_engine clearsCookies];
[_engine release];
_engine = nil;
[[NSUserDefaults standardUserDefaults] setObject:@"" forKey: @"authData"];
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
{
NSString* domainName = [cookie domain];
NSRange domainRange = [domainName rangeOfString:@"twitter"];
if(domainRange.length > 0)
{
[storage deleteCookie:cookie];
}
}
[self.navigationController popViewControllerAnimated:YES];
}
此代码将成功注销Twitter。