Twitter + Oauth на iPhone: как выйти из системы? - PullRequest
0 голосов
/ 11 сентября 2009

Я использую http://github.com/bengottlieb/Twitter-OAuth-iPhone/tree/master для Twitter + Oauth в своем приложении для iPhone. Я пытаюсь создать функцию подключения в Facebook, где можно войти и выйти из Twitter. Эта патетическая реализация Twitter + Oauth не использует сессии, поэтому я не уверен, как это работает.

Есть ли у кого-нибудь опыт с этим, и если да, то как мне выйти из системы?

Ответы [ 6 ]

6 голосов
/ 02 мая 2011

Вы должны очистить cookie-файлы браузера Browser _jgine store имя пользователя и пароль в cookie-файлах.

Вот правильный код для выхода из системы в Twitter.

-(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 голос
/ 16 апреля 2011

Выходя из системы, вам нужно позаботиться о нескольких вещах, таких как

  1. очистить куки,
  2. очистить токен доступа
  3. также удалить объекты из NSUserDefaults
  4. при последнем отпускании объекта.

В противном случае это создаст проблему, и даже приложение будет аварийно завершено при попытке повторной регистрации, и оно может сохранить ваш токен доступа. Можно было бы не войти в систему с новым именем пользователя и паролем. Так что это обязательная часть, о которой нужно позаботиться, когда вы выходите из системы.

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

Надеюсь, теперь это будет очень ясно. Попробуй.

1 голос
/ 16 апреля 2011

Большое спасибо @Justin Gallagher!

Я всюду искал ответ на этот вопрос и действительно видел ваш ответ некоторое время назад, но не думал, что там было что-то, чего я не пробовал.

Я бросил на это каждое предложение, и окончательный ответ, кажется, представляет собой комбинацию вашего и того, что здесь:

То, что я уже не делал (что вы предложили), было:

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

Или в моем случае:

_engine = nil;

Это приводит к тому, что контроллер представления в твиттере снова всплывает, но без подсказок имени пользователя и пароля - поэтому просто разрешите и запретите кнопки.

Если вы хотите, чтобы он полностью вышел из системы и поэтому запрашивал у пользователя новые учетные данные в следующий раз (без перезапуска приложения), вам необходимо установить:

_clearsCookies = YES;

В классе MGTwitterEngine.

Еще раз спасибо!

1 голос
/ 24 октября 2009

Мне удалось смоделировать выход из системы с помощью следующего кода:

- (IBAction)logoutOfTwitter:(id)sender {
    [oauthEngine release];
    oauthEngine = nil;
    [[NSUserDefaults standardUserDefaults] setObject:@"" forKey: @"authData"];
}
0 голосов
/ 20 мая 2011

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

}

Этот код успешно завершит твиттер.

0 голосов
/ 10 ноября 2009

Это также работает:

[oauthEngine clearAccessToken];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...