2009-09-11 55 views

回答

1

我能够模拟一个注销用下面的代码:

- (IBAction)logoutOfTwitter:(id)sender { 
    [oauthEngine release]; 
    oauthEngine = nil; 
    [[NSUserDefaults standardUserDefaults] setObject:@"" forKey: @"authData"]; 
} 
0

这也适用于:

[oauthEngine clearAccessToken]; 
+0

这是否清除用户登录?如果是这样,这是一个更清洁! – 2009-12-05 02:59:55

1

非常感谢@Justin加拉格尔!

我一直在寻找无处不在的答案,并且实际上在前一段时间看到了你的答案,但是没有想到在那里我还没有尝试过任何东西。

我把每一个建议吧,最后的答案似乎是你的组合和一个在这里:github_bengottlieb_Twitter-OAuth-iPhone_issues_41

什么我没有做已经(你认为)是:

oauthEngine = nil; 
[[NSUserDefaults standardUserDefaults] setObject:@"" forKey: @"authData"]; 

或者对于我来说:

_engine = nil; 

这使得Twitter的视图控制器再次弹出,但没有用户名& passwor d提示 - 因此只允许和拒绝按钮。

如果你想让它完全注销,因此下一次提示用户输入新的凭据(无需重新启动应用程序),您需要设置:

_clearsCookies = YES; 

在MGTwitterEngine类。

再次感谢!

1

做注销,你需要照顾的几件事情像

  1. 明确的饼干,
  2. 明确的访问令牌
  3. 也 NSUserDefaults的
  4. 删除对象的最后一个版本的对象。

否则会制造麻烦&即使该应用程序会得到崩溃时,你会尝试重新登录&它可以存储你的访问令牌。其中一个将无法以新的用户名& password登录。因此,这是您在注销时需要注意的强制性部分。

- (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; 
    } 

希望现在会非常清楚。试试吧。

6

您必须清除Cookie中的Browser Bcz _engine商店用户名和密码。

下面是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]; 
    } 
} 

} 
+0

伟大伟大。 – ICoder 2011-11-16 04:19:56

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]; 

}

该代码将成功地登出鸣叫声。