iPhone上的Twitter + Oauth:你如何退出?

时间:2009-09-11 13:48:14

标签: iphone

我在我的iPhone应用程序中使用http://github.com/bengottlieb/Twitter-OAuth-iPhone/tree/master用于Twitter + Oauth。我正在尝试创建一个类似facebook连接的功能,可以登录并注销twitter。这个特殊的Twitter + Oauth实现不使用会话,所以我不确定这是如何工作的。

有没有人有这方面的经验,如果是这样我将如何退出?

6 个答案:

答案 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)

执行注销时,您需要处理几件事情,例如

  1. 清除cookies,
  2. 清除访问令牌
  3. 也会删除对象 NSUserDefaults的
  4. 最后发布了该对象。
  5. 否则会造成麻烦&当你试图重新登录时,即使应用程序也会崩溃它可能存储您的访问令牌。一个人无法使用新的用户名登录密码。这是强制性部分,当你注销时需要处理它。

    - (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。